6

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

4

3 に答える 3

9

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

于 2008-08-28T20:28:13.177 に答える
3

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

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

于 2008-08-28T21:41:43.030 に答える
0

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

2つを混ぜないでください!

于 2008-09-02T11:31:15.690 に答える