C++ STL 问题:分配器

Posted

技术标签:

【中文标题】C++ STL 问题:分配器【英文标题】:C++ STL question: allocators 【发布时间】:2010-09-07 04:37:48 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

Don't mix the two!

【讨论】:

以上是关于C++ STL 问题:分配器的主要内容,如果未能解决你的问题,请参考以下文章

C++标准库 STL -- 容器源码探索

C++ STL容器适配器 内容详解

C++ STL教程(13)容器适配器使用

C++ STL应用与实现18: 如何使用迭代器适配器

C++标准库

C++ STL priority_queue容器适配器详解