就我而言(具有 16GB 内存的 64 位 ubuntu,使用 Eigen3),我编写了 MatrixXd m(M,M); 其中M = 100,000,运行时程序崩溃,并报:
what(): std::bad_alloc
中止(核心转储)
使用动态 2 dim 数组,程序运行良好。Eigen 中(密集)矩阵的大小是否有硬性限制?
您正在尝试分配100000*100000
每个 8 字节或 80,000,000,000 字节 (74.5GB) 的元素,但由于您只有 16GB 的内存而失败。这会导致内存分配失败,因为它找不到那么大的单个连续内存块。
Eigen 没有固定的限制,但数组确实需要在您的系统上是可分配的。
你忘记了矩阵元素的大小。
MatrixXd 使用双精度
100000 * 100000 = 10000000000 个元素。
sizeof(double) 在您的系统上可能是 8。
这意味着,为了创建这个矩阵,你需要:
width*height*sizeof(double) => 100000*100000*8/(1024*1024*1024) => 74.5 GB 内存。