6

私はCとC++の両方のストレージクラス(static、extern、auto、register、C ++も可変およびいくつかのコンパイラ固有のクラスを追加します)を知っていますが、ストレージアロケータが何であるかを理解できません。STLに実装可能なメモリアロケータを指しているとは思いませんが、簡単に言えば何ですか?

4

2 に答える 2

5

それは背後にあるものは何でもoperator new(オペレーターとオペレーターとoperator delete混同しないでください)。フリーストアからメモリを割り当て、再利用のために以前に割り当てられたメモリを解放します。コードが(演算子)を実行すると、コンパイラは適切なバイト数のストレージを取得するために呼び出すコードを生成し、次にのコンストラクタを呼び出します。コードが(演算子)を実行すると、コンパイラはのデストラクタを呼び出し、次にメモリを解放するために呼び出します。newdeleteoperator newoperator deleteoperator newfoo *ptr = new foonewoperator newfoodelete ptrdeletefoooperator delete

これは、C++03標準でこの用語が使用される方法であることに注意してください。C ++ 11標準では、標準アロケータを指すためにも使用されます。

于 2013-02-27T15:28:31.967 に答える
5

C ++標準では、この用語は、STLスタイルのコンテナーで使用されるアロケータークラスstd::allocator、またはC ++1117.6.3.5で指定された要件を満たすユーザー定義のカスタムアロケーターを指すために使用されます。

ただし、これは正式に定義された用語ではなく、フリーストアの実装(つまり、によって割り当てられた動的ストレージ)を指す場合にも表示されnewます。

[注:現在の(2011)言語仕様を参照しています。コメントに記載されているように、仕様の過去のバージョンでは、フリーストアを指すために(非公式に)この用語のみが使用されていたようです]

于 2013-02-27T15:32:45.707 に答える