【问题标题】:Read 'large' data file in C++在 C++ 中读取“大”数据文件
【发布时间】: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&lt;std::array&lt;int, length_grid_pl&gt;, length_grid1&gt; M1_BETA; 通常在堆栈中实例化,这对于大多数环境中可用的堆栈来说太大了,是的。
  • 对于大数据,您应该使用std::vector
  • 它确实与 std::vector 一起工作,谢谢!和数组有什么区别?

标签: c++ database stream


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-06
    • 2016-04-17
    • 2023-03-28
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多