我正在尝试创建大小为10x10到1000x1000的所有矩阵,大约980我开始耗尽内存,即使程序显然没有使用我的所有4GB系统。我的代码如下:
double **a3;
double **result;
a3 = malloc(k * sizeof(double *));
for(i = 0; i < k; i++)
{
a3[i] = malloc(sizeof(double));
}
result = malloc(k * sizeof(double *));
for(i = 0; i < k; i++)
{
result[i] = malloc(k * sizeof(double));
}
for(i = 0; i < k; i++)
{
for( j = 0; j < k; j++)
{
a3[i][j] = 0;
result[i][j] = 0;
}
}
...
for(i = 0; i < k; i++)
{
free(a3[i]);
free(result[i]);
}
free(a3);
free(result);
我不确定为什么这不起作用(如果我使用int数组但它需要双数组,它确实有效)
我正在使用Mac OSX 64位
答案 0 :(得分:1)
我不确定你实际上对于不使用程序可用的所有内存有多么“清楚”。如果我正确地计算,你最终会分配总共333,833,185双打。每个八个字节,超过2.5GB。
不确定你的C编译器的内存管理工具有多少可用...为什么不编写一个简单的程序来发现你可以使用malloc()的最大内存量呢?