私はそれを見つけるために次のコードを使いましたが、私はいつも答えとして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;
}
私は、WindowsとLinuxの両方をインストールした状態で64ビットシステムを使用しています。したがって、私は64ビットシステム上の答えとしてちょうど1ギガビットを得ていますが、上記のロジックは正しいですか?
。 o/sによって設定された制限に依存する可能性がありますが、これは適切な特権ユーザーによって調整される可能性があります。 1023 * 1024 * 1024 * 2を割り当てようとしましたか? –
intが符号付き32ビット変数の場合、このコードは整数オーバーフローに悩まされる危険があると思います。定数をunsigned longにしてみてください(または、コンパイラにそれがある場合はunsigned long longとしてください)。 – unwind
@unwindそれは私のために働いた。私はそれを止める前に500GBを超えることができました。 (Mac OS Xは特定のサイズを超えて 'mmap()'を使用しています。)あなたのコメントを答えて投票できるようにします。 – chrisaycock