C ++ STL问题:分配器
时间:2020-03-05 18:44:39 来源:igfitidea点击:
我对C ++ STL有一个(可能很愚蠢的)问题。当我制作一个容器(向量,集合,映射等)时,它是分配在堆栈上还是堆上?如果我进行设置并放置500万个字符串,是否需要担心堆栈溢出?
解决方案
回答
默认情况下,STL类从堆中分配其内部缓冲区,尽管这些类还允许自定义分配器,这些分配器允许用户指定一个备用位置以从中进行分配。共享内存池。
回答
STL容器的默认分配器使用运算符new和delete,因此无论是包含哪种类型的那些路由。 (通常,它来自堆,除非我们执行某些操作来覆盖它。)
分配500万个字符串不会导致堆栈溢出。即使我们创建了一个基于堆栈的分配器,它甚至可能在我们插入一个字符串之前就溢出了。
回答
容器本身分配在我们决定的位置(可以是堆栈,堆,对象的成员等),但是默认情况下,如其他描述的那样,容器使用的内存是在免费存储区中获取的(通过new和delete管理)这与堆(通过malloc / free管理)不同。
不要将两者混在一起!