我用下面的代码找出它,但总是得到1作为答案。有什么不对。谢谢malloc可以为你的程序分配多少GB
#include <stdio.h>
#include <stdlib.h>
int main(){
int mult = 0;
int chk =8;
do{
mult+=1;
int *p = (int*)malloc(1024*1024*1024*mult);
if(p==0){
chk =0;
}else{
free(p);
}
}while(chk !=0);
mult = mult -1;
printf("The number of gigs allocated is : %d\n",mult);
return 0;
}
只是为了帮助,我有一个64位系统与Windows和Linux安装。因此,即使我在64位系统上获得1 GB的答案,上述逻辑是否正确?
这取决于你的O/S。它可能取决于o/s设置的限制,可以由适当的特权用户进行调整。你试过分配1023 * 1024 * 1024 * 2吗? – 2011-02-02 16:16:52
如果int是一个有符号的32位变量,我认为这个代码有被整数溢出的风险。尝试使常量无符号长(或无符号长整型如果你的编译器有它)。 – unwind 2011-02-02 16:20:37
@unwind这对我很有帮助。在关闭它之前,我能够超过500 GB。 (Mac OS X使用超过一定大小的`mmap()`)。给你的评论一个答案,以便我可以投票。 – chrisaycock 2011-02-02 16:29:00