5

new/mallocとによるメモリ割り当ての違いは何allocatorですか?

newとのオプションがある場合、ベクトル用に別のメモリ アロケータが必要になるのはなぜでしょうmallocか。

4

4 に答える 4

2

new または malloc を使用すると、メモリ管理はコンパイラの実行時に対応する関数に組み込まれます。対照的に、アロケータを使用すると、メモリ管理は交換可能なアロケータに委譲されます。これにより、使用するメモリ管理関数を変更できます。

この余分なレベルの抽象化と制御を行うには、いくつかの正当な理由があります。たとえば、次を参照してください: カスタム C++ STL アロケーターの説得力のある例? .

于 2013-02-17T15:25:20.493 に答える
1

newええと、とmallocは違うと思いますし、allocator違う機能を提供します。初期化されていないデータを返し、ゼロmalloc化されたデータを返します。ただし、あるクラスのインスタンスを作成している場合は、コンストラクターを呼び出します(ただし、これらのプリミティブ型は初期化することもできます)。デストラクタを呼び出しますが、呼び出しません。callocnewintbooldeletefree

に関してはallocator、ユーザーに抽象化レイヤーを提供します。allocator構築されたオブジェクト、初期化されていないメモリスペースを返すか、オブジェクトを破棄するか、スペースを解放することができます。STLコンテナはallocator 、メモリスペースを取得してオブジェクトを作成するために使用します。

ただし、カスタムallocatorが可能であるため、anallocatorは必ずしもnew/のようなメモリを管理するわけではないことに注意してくださいdelete。大量のメモリを作成してから、割り当てキャッシュを実行できます。ディスク上のファイルにマップされた領域のメモリアドレスを返すことができるため、内部データは上位層のコンテナによって変更されたときにファイルシステムに入ります。また、newメモリを取得するために呼び出すことができます。このようにして、allocatorユーザーはメモリの特定の領域にあるコンテナを構築できます。したがって、allocatorsを使用すると、コンテナの内部ロジックがメモリストレージの管理方法から分離されます。

std::allocator実際には、上記のすべての機能を実装するために派生したクラスを作成できます。


の詳細については、これをお読みくださいallocator

于 2013-02-17T15:22:13.117 に答える
0

allocatorクラスには、次allocate()のように 2 つのパラメーターを取る があります。

pointer allocate (size_type n, allocator<void>::const_pointer hint=0);

allocate()のリファレンスによると、ヒント パラメータを使用して、指定したブロックに隣接する新しいメモリ ブロックを割り当てる必要があることを示すことで、パフォーマンスを向上させることができます。したがって、ヒントを使用して、配列の場合のようにブロックが連続するようにブロックを割り当てることができると思います。

于 2013-02-17T15:25:55.803 に答える
0

アロケータはメモリ マネージャです。たとえば、STL コンテナーはデフォルトのアロケーターを提供しますが、この記事 (STL アロケーターのチュートリアル) で説明されているようにカスタマイズできます: http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c4079 /Allocators-STL.htm .

于 2013-02-17T15:40:44.307 に答える