C ++ STL问题:分配器

时间:2008-08-28 20:26:14

标签: c++ stl

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

容器本身是在您决定的地方分配的(它可以是堆栈,堆,对象的成员等),但默认情况下,它使用的内存与Free Store中描述的其他内容一样(通过new管理)并删除)与堆不同(通过malloc / free管理)。

Don't mix the two!