質問

C++ STL について (愚かかもしれない) 質問があります。コンテナー (ベクター、セット、マップなど) を作成するとき、コンテナーはスタック上に割り当てられますか? それともヒープ上に割り当てられますか?セットを作成して 500 万個の文字列を配置した場合、スタック オーバーフローを心配する必要がありますか?

役に立ちましたか?

解決

STL クラスはデフォルトで内部バッファをヒープから割り当てますが、これらのクラスでは、ユーザーが割り当て先の代替場所を指定できるカスタム アロケータも使用できます。共有メモリプール。

他のヒント

STL コンテナのデフォルトのアロケータは演算子 new と delete を使用するため、含まれている型のルーティング先となるものになります。(一般に、それをオーバーライドしない限り、ヒープから取得されます。)

500 万個の文字列を割り当ててもスタック オーバーフローが発生することはありません。スタックベースのアロケータを作成したとしても、文字列を 1 つ挿入する前にオーバーフローする可能性があります。

コンテナー自体は、ユーザーが決めた場所 (スタック、ヒープ、オブジェクトのメンバーなど) に割り当てられますが、コンテナーが使用するメモリは、他の人が説明したように、デフォルトで無料ストア (新規および削除によって管理) に取得されます。これはヒープ (malloc/free で管理) とは異なります。

この 2 つを混同しないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top