2

私は動的言語のランタイム ライブラリに取り組んでおり、具体的にはそのメモリ割り当てに取り組んでいます。

ガベージ コレクションを使用しますが、必要に応じてユーザーが独自のメモリ アロケータを使用できるようにするとよいと思いました。ただし、標準の c++ アロケーターインターフェイスを見た後、ジェネリック アロケーターを使用する方法は見当たりませんでした (char でテンプレートを作成する方法を除いて、ハッキーに思えます)。

  • 標準のアロケータ インターフェイスを使用するのは良い考えですか?
  • もしそうなら、複数の型を割り当てるための可能な設計は何でしょうか?

注 : 私のライブラリは C++11 を使用しているため、'新しい' アロケータ インターフェイスについて話しているのです。

4

2 に答える 2

2

@Cubbiが言ったように、見てくださいallocator::rebind。アロケータの実際の型引数は、ほとんど無関係です。標準コンテナはallocator::rebind、実際に必要なタイプに変更するために使用します。特に、連想コンテナは、独自のデータを保持するノードと、コンテナが名目上保持するデータ オブジェクトを割り当てる必要があります。Soはからallocator::rebindを取得するために使用されます。allocator<Node<T>>allocator<T>

于 2012-11-07T18:36:47.507 に答える
1

コンパイル時または実行時のポリモーフィズムが必要かどうかによって異なります。標準アロケーターは前者のケースに適しています。後者の場合、次のようなことができます。

class Allocator {
public:
    virtual void* allocate(std::size_t size) = 0;
    virtual void deallocate(void* p) = 0;
}

ユーザーは、仮想関数を介してアロケーターをカスタマイズできます。

于 2012-11-07T18:33:29.493 に答える