在我的情况下(64位ubuntu,16GB内存,使用Eigen3),我写了MatrixXd m(M,M);其中M = 100,000,在运行时,程序崩溃,并报告:
what():std :: bad_alloc
中止(核心倾销)
使用动态2 dim数组,程序运行正常。 Eigen(密集)矩阵的大小是否有硬限制?
答案 0 :(得分:6)
您正在尝试分配每个8字节的100000*100000
元素,或80,000,000,000字节(74.5GB),这是因为您只有16GB的内存而失败。这会导致内存分配失败,因为它无法找到单个连续的大内存块。
Eigen没有固定限制,但数组确实需要在您的系统上进行分配。
答案 1 :(得分:1)
你忘记了矩阵元素的大小。
MatrixXd使用双
100000 * 100000 = 10000000000个元素。
sizeof(double)在你的系统上可能是8。
这意味着,为了创建这个矩阵,你需要:
width * height * sizeof(double)=> 100000 * 100000 * 8 /(1024 * 1024 * 1024)=> 74.5千兆字节的内存。