我正试图将旧的R代码复制到c++中,以获得一些速度。这段代码需要使用预加载的数据(6个维度为13689 x 126的矩阵)(每个矩阵在.txt文件中的权重约为28 MB)。在内存中加载它不会对R造成任何问题。
我构建了一个c++代码(我是c++新手),在那里我尝试"预加载"这些数据(无论如何都要在头文件中预加载它?)。
int i, j;
const int length_grid1 = 13689;
const int length_grid_pl = 126;
ifstream in;
//double M1_BETA[length_grid1][length_grid_pl]; // either this, or the other one
std::array<std::array<int, length_grid_pl>, length_grid1> M1_BETA;
in.open("preloaded_object/M1_BETA.txt");
for (i = 0; i < length_grid1; i++) {
for (j = 0; j < length_grid_pl; j++) {
in >> M1_BETA[i][j];
}
}
in.close();
两个版本,使用双或数组不工作:我可以编译文件(使用英特尔作曲家),但当我启动。exe,它立即崩溃。这种情况只发生在一个矩阵加载时…我必须加载其中的6个
我不认为这是一个问题来自我的代码,当我减少数据维,它执行自己没有任何问题。
注意,如果没有加载所有内容,我就不能运行程序。重新加载它一部分一部分会减少太多的速度我认为(我切换到c++为了获得计算速度…)。
程序崩溃是因为28MB太多了吗?看起来很奇怪,因为R没有任何问题…
否则,我能以一种方式预加载,使它占用更少的内存空间吗?我需要有方便的访问任何一行的数据之后(单元格逐单元不是那么重要,我需要的是真正访问特定的行真的很快)。
或者在c++中有另一种方式来存储数据,在任何时候都可用?当std::array
在堆栈上实例化时,应该使用std::vector
。看看c++中http://en.cppreference.com/w/cpp/container/array和std::vector与std::array的对比。