无法在64位Linux机器,我写了下面的小C程序:分配的超过2GB的64位二进制
#include <stdlib.h>
#include <stdio.h>
int main (void)
{
#define BLOCK_SIZE (1024*1024)
int i;
for (i = 1; ; i++)
{
char *p = (char *)malloc(i * BLOCK_SIZE);
if (p == 0)
break;
*p = 13;
free(p);
}
printf ("Allocated max %d MB\n", (i - 1));
return 0;
}
如果我编译这个与-O0 -m64
,我可以在我的桌面系统上分配2047 MB 。如果我编译与-O0 -m32
3829 MB相同的程序。
为什么在同一台机器上,32位二进制的最大malloc大小大于64位二进制大小?
编辑:如果我用-O3
激活优化器,64位机器上的最大内存量为20588。
您是否曾尝试过这种方式,或者结果与您的程序的多个(如数十甚至数百)运行一致?此外,当您在启动后直接运行程序的结果与您的计算机运行几小时甚至几天后的结果相似吗? –