【发布时间】:2014-02-03 14:47:02
【问题描述】:
在 64 位 linux 机器上,我编写了以下小 C 程序:
#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。
【问题讨论】:
-
您是否只尝试过几次,或者您的程序多次(如数十次甚至数百次)运行的结果是否一致?此外,在启动后直接运行程序与让计算机运行几个小时甚至几天后的结果是否相似?
标签: c linux memory-management malloc