分配的超过2GB的64位二进制

无法在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。

回答:

您正试图在有符号的32位int中存储大于2^31的数字。它不适合。请使用size_t代替您传递给malloc的尺寸。将i的类型更改为size_t

以上是 分配的超过2GB的64位二进制 的全部内容, 来源链接: utcz.com/qa/262100.html

回到顶部