【发布时间】:2016-08-26 17:06:56
【问题描述】:
我正在尝试将旧的 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();
使用 double 或 array 的两个版本都不起作用:我可以编译文件(使用 Intel Composer),但是当我启动 .exe 时,它会立即崩溃。仅加载一个矩阵时会发生这种情况...我必须加载其中的 6 个。
我不认为这是来自我的代码的问题,当我减少数据维度时,它会自行执行而没有任何问题。
请注意,如果未加载所有内容,我之后将无法运行该程序。并且部分地重新加载它会大大降低我认为的速度(我切换到 C++ 以提高计算速度..)。
程序是否因为 28MB 太大而崩溃?看起来很奇怪,因为 R 没有任何问题,例如......
否则,我能否以某种方式进行预加载,使其在内存中占用的空间更少?之后我需要轻松访问任何数据行(逐个单元格并不那么重要,我真正需要的是真正快速地访问特定行)。
或者在 C++ 中是否还有另一种存储数据的方式,可以随时使用?
提前致谢。
【问题讨论】:
-
std::array<std::array<int, length_grid_pl>, length_grid1> M1_BETA;通常在堆栈中实例化,这对于大多数环境中可用的堆栈来说太大了,是的。 -
对于大数据,您应该使用
std::vector。 -
它确实与 std::vector 一起工作,谢谢!和数组有什么区别?