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

有帮助吗?

解决方案

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

其他提示

STL 容器的默认分配器使用运算符 new 和 delete,因此它是所包含类型的路由。(一般来说,它来自堆,除非您执行某些操作来覆盖它。)

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

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

不要把两者混为一谈!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top