我有以下代码:
int main() {
int N = 1000000;
int D = 1;
double **POINTS = new double * [N];
for (unsigned i=0;i<=N-1;i++) POINTS[i] = new double [D];
for (unsigned j=0;j<=D-1;j++) POINTS[0][j] = 0;
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < D; ++j)
{
POINTS[i][j] = 3.14;
}
}
}
如果每个pointer
的尺寸为8
以及N = 10^6
和D = 1
,则预计POINTS
的尺寸必须为8 * 10^6 * 1 / 1000 / 1000 = 8 mb
但事实上这个程序吃了42 mb
的记忆。如果N = 2 * 10^6
预期为16 mb
,则实际为84
。为什么呢?
答案 0 :(得分:3)
有很多可能的原因:
简而言之,没有简单的方法来解释为什么你的程序使用的内存比你想象的要多,除非你遇到问题,否则你可能不应该关心。如果你遇到问题&#34; valgrind&#34;和类似的工具将帮助您找到它们。
最后一点:动态分配的2d数组是创建上述问题的最简单方法之一。