私はmmap()
を使って仮想メモリを操作しようとしています。私はメモリの領域を予約してコミットしたい。私はこのコードをテストした:大きなサイズの呼び出しのmmap()が失敗しないのはなぜですか?
const unsigned long gygabyte = 1024 * 1024 * 1024;
const unsigned long gygabyteCount = 2;
const unsigned long maxCapacity = gygabyteCount * gygabyte;
int main()
{
char* pMemory;
pMemory = (char*)mmap(NULL, maxCapacity, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (mprotect(pMemory, maxCapacity, PROT_READ | PROT_WRITE) != 0)
{
cout << "Memory Allocation has failed" << endl;
}
usleep(-1);
return 0;
}
端末からいくつかの私のプログラム(例えば6)を走らせた。私は "Memory Allocation has failed"を見たことはありませんでした。私は4GBのRAMを搭載した64ビットのUbuntuで動作しています。誰も私にこれについて何か教えてもらえますか?
メモリオーバーコミットについて読む – PlasmaHH
投稿したコードは何もコミットしません。それらのメモリ領域を歩き回ってみてください。 – Mat