私はCとC++の両方のストレージクラス(static、extern、auto、register、C ++も可変およびいくつかのコンパイラ固有のクラスを追加します)を知っていますが、ストレージアロケータが何であるかを理解できません。STLに実装可能なメモリアロケータを指しているとは思いませんが、簡単に言えば何ですか?
2 に答える
それは背後にあるものは何でもoperator new
(オペレーターとオペレーターとoperator delete
混同しないでください)。フリーストアからメモリを割り当て、再利用のために以前に割り当てられたメモリを解放します。コードが(演算子)を実行すると、コンパイラは適切なバイト数のストレージを取得するために呼び出すコードを生成し、次にのコンストラクタを呼び出します。コードが(演算子)を実行すると、コンパイラはのデストラクタを呼び出し、次にメモリを解放するために呼び出します。new
delete
operator new
operator delete
operator new
foo *ptr = new foo
new
operator new
foo
delete ptr
delete
foo
operator delete
これは、C++03標準でこの用語が使用される方法であることに注意してください。C ++ 11標準では、標準アロケータを指すためにも使用されます。
C ++標準では、この用語は、STLスタイルのコンテナーで使用されるアロケータークラスstd::allocator
、またはC ++1117.6.3.5で指定された要件を満たすユーザー定義のカスタムアロケーターを指すために使用されます。
ただし、これは正式に定義された用語ではなく、フリーストアの実装(つまり、によって割り当てられた動的ストレージ)を指す場合にも表示されnew
ます。
[注:現在の(2011)言語仕様を参照しています。コメントに記載されているように、仕様の過去のバージョンでは、フリーストアを指すために(非公式に)この用語のみが使用されていたようです]