10

C++ と標準ライブラリに関する本を読んでいると、アロケータについて頻繁に言及されています。

たとえば、Nicolai Josuttis のThe C++ Standard Libraryでは前の章で詳細に説明されており、項目 10 (「アロケーターの規則と制限に注意する」) と 11 (「カスタム アロケーターの正当な使用法を理解する」) の両方で Scott Meyers の効果的な STLは、それらの使用に関するものです。

私の質問は、アロケータが特別なメモリ モデルをどのように表すのかということです。デフォルトの STL メモリ管理では不十分ですか? 代わりにアロケーターを使用する必要があるのはいつですか?

可能であれば、簡単なメモリ モデルの例で説明してください。

4

1 に答える 1

12

アロケータは、生メモリの割り当てと、そのメモリ内のオブジェクトの構築/破棄を抽象化します。

ほとんどの場合、デフォルトの Allocator で問題ありません。ただし、場合によっては、別のものに置き換えることで効率を上げることができます。古典的な例は、多数の非常に小さなオブジェクトを割り当てる必要がある/割り当てたい場合です。たとえば、それぞれがわずか 12 バイト程度の文字列のベクトルを考えてみましょう。通常のアロケータは を使用しますがoperator new、このような小さなオブジェクトにはかなりのオーバーヘッドがかかる可能性があります。より大きなメモリ チャンクを割り当て、必要に応じて分割するカスタム アロケータを作成すると、メモリと時間を大幅に節約できます。

于 2013-07-25T03:26:29.860 に答える