無法在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。
您是否曾嘗試過這種方式,或者結果與您的程序的多個(如數十甚至數百)運行一致?此外,當您在啓動後直接運行程序的結果與您的計算機運行幾小時甚至幾天後的結果相似嗎? –