2008-08-28 71 views
6

我有一個關於C++ STL的(可能是愚蠢的)問題。當我創建一個容器(矢量,集合,地圖等)時,它是分配在堆棧上還是分配在堆上?如果我創建一個集合並放置500萬個字符串,我是否會擔心堆棧溢出?C++ STL問題:分配器

回答

9

STL類默認從堆中分配它們的內部緩衝區,雖然這些類也允許自定義分配器,它們允許用戶指定從 - 共享內存池。

3

STL容器的默認分配器使用operator new和delete,所以它是任何用於包含類型的路由。 (一般來說,它來自堆,除非你做了一些改寫。)

你不會因爲分配500萬個字符串而導致堆棧溢出。即使你創建了一個基於堆棧的分配器,它甚至會在你插入一個字符串之前溢出。

0

容器本身是在你決定的地方分配的(它可以是堆棧,堆,對象的成員等),但它使用的內存默認情況下是其他內容所描述的,新的和刪除),這是不一樣的堆(通過malloc /免費管理)。

Don't mix the two!