简单问题,std::initializer_list是否会堆分配内存?我不是在谈论它的元素项,而是缓存本身以存储元素。
这是一个有趣的问题。我同意Josh的回答,只想补充一下我创建了以下相关实验。我尝试编译和运行了以下代码:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v = {
#include "x.inc"
};
std::cout << v.size() << std::endl;
}
x.inc
文件由该程序生成,包含了 100M 次 0,
和一个结尾的 0
。
#include <fstream>
int main()
{
std::ofstream f("x.inc");
for (int i = 0; i < 100000000; i++)
f << "0, ";
f << "0\n";
}
使用GCC创建的可执行文件大小为328 MB,这表明std::intializer_list
的整个实例实际上位于程序的数据段中。运行时没有出现分段错误,并且Valgrind除了向量v
所需的400 MB之外,报告没有堆分配。