我正在使用Eigen图书馆。我创建了一个大小为M×N的矩阵Z,它包含随机标准法线。一切看起来都很好,但是当我将M增加到100,000并且N增加到10,000时,我的程序没有明显的原因。
为了说明假设M = 4且N = 2,那么我将
0.106358 -0.894365
0.452166 -0.619815
0.554152 0.257035
0.654476 -1.26393
这是我们的预期。现在,当我设置M = 10000和N = 1000时,一切正常。但是一旦我设置M = 100000并且N = 10000,那么我在Eclipse上得到这个消息
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
我之前遇到过这种情况,但是当我重新启动电脑时,一切都还好。但出于某种原因,我似乎无法解决这个问题。非常感谢任何建议。
这是我的代码:
MatrixXd Z(M,N);
random_device rd;
mt19937 e2(time(0));
normal_distribution<double> dist(0.0, 1.0);
for(int i = 0; i < M; i++){
for(int j = 0; j < N; j++){
Z(i,j) = dist(e2);
}
}
此外,当我评论所有内容时,除非我设置MatrixXd Z(M,N)
我的程序仍然崩溃。
答案 0 :(得分:2)
尺寸为10000x100000的双打矩阵将具有以下尺寸:
8*10000*100000 = 8 000 000 000 bytes
这远远超过你可以在堆栈上分配(默认情况下在1 MB
在MSVC中),以及32位程序可以分配的4 GB以上。
因此,请使用堆分配并以64位配置编译程序。
修改强> 是的,您还需要适当数量的RAM才能以合理的速度运行。