まず、私はmallocのメモリとcallocのメモリフットプリントが違うことに気付きました。私は数GBのデータセットを扱っています。このデータはランダムでも構いません。Mallocのメモリに関する質問
大量のメモリをmallocして、ランダムなデータがフロートにキャストされているものを読み込むことができます。しかし、プロセスビューアのメモリフットプリントを見ると、メモリは明らかに要求されていません(対私は大きなフットプリントを参照しています)。メモリにデータを書き込むためにループを実行した後、メモリの占有量が増えた。 私はそれを初期化するまでメモリが実際に請求されていないと言って正しいですか?
最後に1024 * 1024 * 128バイト(プロセスビューアで1024 MB)を過ぎた後、私はsegfaultを取得し始めました。しかし、Callocは最大1GBまで初期化されているようです。 mallocで128MBのforループでメモリを初期化するときにsegfaultsが発生する理由と、メモリフットプリントが1024MBになるのはなぜですか?
mallocがメモリから大量に読み込まれている場合は、プロセスビューアには初期化するまでフットプリントがほとんど表示されないため、何が表示されますか?
最後に4GBを超える割り当て方法はありますか?私はメモリ階層のパフォーマンスをテストしています。 #2の
コード:
long long int i;
long long int *test=(long long int*)malloc(1024*1024*1024);
for (i=0;i<1024*1024*128;i++)
test[i]=i;
sleep(15);
32ビットまたは64ビットLinux? –
Linuxは「楽観的なメモリ割り当て戦略」を使用しています。いくつかの情報:http://linux.die.net/man/3/malloc – sje397
*初期化するまでメモリは実際には請求されません*正しいです、それは*レイジー評価*の特別なケースで、OSによって処理されます。しかし、第2の仮定、* 1024 * 1024 * 128バイト== 1Gb *は間違っています。 – ruslik