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 问题:分配器的主要内容,如果未能解决你的问题,请参考以下文章