C ++ STL问题:分配器

C ++ STL问题:分配器

C++ STL question: allocators

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


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


STL容器的默认分配器使用new和delete运算符,因此无论所使用的类型是哪种路由。 (通常,它来自堆,除非您执行某些操作来覆盖它。)

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


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

不要将两者混在一起!


推荐阅读