我用下面的代碼找出它,但總是得到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