6

我有一个关于 C++ STL 的(可能是愚蠢的)问题。当我创建一个容器(向量、集合、映射等)时,它是分配在堆栈上还是堆上?如果我做了一个集合,放了 500 万个字符串,我会不会担心堆栈溢出?

4

3 回答 3

9

默认情况下,STL 类从堆中分配其内部缓冲区,尽管这些类也允许自定义分配器,允许用户指定备用位置来分配 - 例如共享内存池。

于 2008-08-28T20:28:13.177 回答
3

STL 容器的默认分配器使用运算符 new 和 delete,因此它是所包含类型的任何路由。(一般来说,它来自堆,除非你做一些事情来覆盖它。)

分配 500 万个字符串不会导致堆栈溢出。即使您制作了一个基于堆栈的分配器,它也可能会在您插入一个字符串之前溢出。

于 2008-08-28T21:41:43.030 回答
0

容器本身分配在您决定的位置(它可以是堆栈、堆、对象的成员等),但它使用的内存默认情况下,正如其他人所描述的,在 Free Store 上获取(通过 new 和 delete 管理)这与堆不同(通过 malloc/free 管理)。

不要将两者混为一谈!

于 2008-09-02T11:31:15.690 回答