2013-07-25 3 views
8

C++と標準ライブラリの本を読んでいるうちに、私は頻繁にアロケータを参照しています。アロケータとは何ですか?アロケータはいつ使用されますか?

例えば、ニコライJosuttis氏のC++標準ライブラリが最後の章でそれらを詳細に説明し、かつアイテム10(「アロケータ規則&の制限に注意してください 『)及び11の両方が(』カスタムの合法的な使用法を理解するにはアロケータ」)は、スコットマイヤーズの有効STLで使用されています。

私の質問は、アロケータは特別なメモリモデルをどのように表していますか?既定のSTLメモリ管理では十分ではありませんか?代わりにアロケータを使用する必要はありますか?

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

+0

おそらく関連しています:[カスタムC++ STLアロケータの優れた例?](http://stackoverflow.com/q/826569) –

答えて

8

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

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