用C ++读取'大'数据文件

时间:2016-08-26 17:06:56

标签: c++ database stream

我正在尝试重现我在C ++中使用的旧R代码以获得一些速度。 此代码需要使用预加载的数据(尺寸为13689 x 126的6个矩阵)(每个都在.txt文件中加权约28 MB)。 R没有任何问题导致将其加载到内存中。

我构建了一个C ++代码(我是C ++的新手),我尝试“预加载”这些数据(无论如何要将它预先加载到头文件btw中?)。

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时,它会立即崩溃。只有一个矩阵加载时才会发生这种情况......我必须加载其中的一个。

我不认为这是来自我的代码的问题,当我减少数据维度时,它会自行执行而没有任何问题。
请注意,如果未加载所有内容,我将无法运行该程序。并且重新加载它会逐渐减少我想的速度(我改用C ++以获得计算速度......)。

程序崩溃是因为28MB太多了吗?看起来很奇怪,因为R没有任何问题,例如......

否则,我可以预先加载内存较少的位置吗?之后我需要轻松访问任何数据行(逐个单元格并不是那么重要,我需要的是真正快速访问特定行)。

或者在C ++中是否存在另一种存储数据的方式,可以随时使用?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您应该使用1,因为std::vector已在堆栈上实例化。请查看http://en.cppreference.com/w/cpp/container/arraystd::vector versus std::array in C++