std :: unordered_map分段构造函数中的故障

std::unordered_map segmentation fault in constructor

本文关键字:故障 构造函数 map unordered std 分段      更新时间:2023-10-16

当分配以unordered_map作为atribute的对象时,我一直在遇到一个奇怪的分割错误,调试似乎指向它在分配地图时发生在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;
}

当我调整您的程序实际编译并以64位模式构建时,它可以很好地完成。

当我以32位模式构建它时,它可以使用:

terminate called after throwing an instance of 'St9bad_alloc'
what():  std::bad_alloc

因为它用尽了内存。

您主要陷入系统内存限制。

在我的系统上,sizeof(Graph)为56。仅需5 GB的内存即可创建仅对对象的100000000。当然,还有其他与动态内存分配相关的开销和创建指针列表。

创建10000000对象时,我能够在环境中运行该程序,比您使用的数字少10倍,但是如果我在该数字末端添加另一个零,则崩溃。