在分配具有unordered_map作为属性的对象时,我发现了一个奇怪的分段错误,调试似乎指向它在分配映射时在hashtable.h上的某处发生。有人知道为什么会这样吗?
在分段错误之前,我达到了值13222438。
struct Graph{
unordered_map<int,Graph*> neighbor;
int something(){return (int)neighbor[0]++;///so it doesnt get optimized out
}
};
int main(){
std::list<Graph*> test;
for(long long i=0; i< 100000000.0d;i++ ){
test.push_back(new Graph());
}
std::cout<< "Done" <<std::endl;
return 0;
}
答案 0 :(得分:0)
当我调整你的程序以实际编译,并在64位模式下构建它时,它就完成了。
当我在32位模式下构建它时,它用:
terminate called after throwing an instance of 'St9bad_alloc'
what(): std::bad_alloc
因为内存耗尽。
答案 1 :(得分:0)
您主要遇到系统内存限制。
在我的系统上,sizeof(Graph)
为56.只需要5 GB的内存就可以创建100000000
个对象。当然,还有其他与动态内存分配和创建指针列表相关的开销。
我能够在创建10000000
对象时在我的环境中运行该程序,比你使用的数量少10倍,但如果我在该数字的末尾添加另一个零,则崩溃。