【发布时间】:2018-06-11 23:42:55
【问题描述】:
我需要为机器学习项目使用大矩阵 20000 * 20000。当它被实现为静态数组时,它使用大约 1.57 GB 的内存。如果它是用向量向量实现的,那么它使用的内存比静态数组(大约 3.06 GB)要多得多。我无法弄清楚背后的原因。
数组版本:
static double distanceMatrix[20000][20000] = {0};
向量的向量:
vector<vector<double>> distanceMatrix(20000, vector<double> (20000));
我用它们来存储点之间的距离。
for (int i = 0; i < 20000; i++){
for (int j = i+1; j < 20000; j++)
distanceMatrix[i][j] = euclid_dist(pointVec[i], pointVec[j]);
}
我还观察到,当我使用数组版本时,内存使用量在嵌套循环期间会逐渐增加。但是,在使用向量的向量时,内存使用量达到 3.06 GB,然后嵌套循环开始。
我使用 Xcode 调试导航器和活动监视器检查了内存使用情况。提前致谢!
【问题讨论】:
-
延迟分配内存,直到它实际用于静态情况下?无论如何,20k*20k*8 已经超过 3GB
-
sizeof(double[20000][20000])是3,200,000,000 -
不要将向量的向量用于二维矩阵。使用大小为 n*m 的向量。使用
operator()(int row, int column)编写一个简单的包装类来访问元素。更好:搜索现有的。 -
谢谢大家的回答。感谢您的建议@manni66。听起来很有效率。我会考虑的。
标签: c++ arrays xcode memory vector