【发布时间】:2010-09-07 04:37:48
【问题描述】:
我有一个关于 C++ STL 的(可能是愚蠢的)问题。当我创建一个容器(向量、集合、映射等)时,它是分配在堆栈上还是堆上?如果我做一个集合,放500万个字符串,我会不会担心堆栈溢出?
【问题讨论】:
我有一个关于 C++ STL 的(可能是愚蠢的)问题。当我创建一个容器(向量、集合、映射等)时,它是分配在堆栈上还是堆上?如果我做一个集合,放500万个字符串,我会不会担心堆栈溢出?
【问题讨论】:
默认情况下,STL 类从堆中分配其内部缓冲区,尽管这些类也允许自定义分配器,允许用户指定备用位置来分配 - 例如共享内存池。
【讨论】:
STL 容器的默认分配器使用运算符 new 和 delete,因此它是所包含类型的任何路由。 (一般来说,它来自堆,除非你做一些事情来覆盖它。)
分配 500 万个字符串不会导致堆栈溢出。即使你制作了一个基于堆栈的分配器,它也可能在你插入一个字符串之前就溢出了。
【讨论】:
容器本身分配在您决定的位置(它可以是堆栈、堆、对象的成员等),但它使用的内存默认情况下,正如其他人所描述的,在 Free Store 上获取(通过 new和删除),这与堆不同(通过 malloc/free 管理)。
【讨论】: