Почему вызов 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) с терминала. Я ни разу не видел «Ошибка распределения памяти». Я работаю на 64-битной Ubuntu с 4 ГБ оперативной памяти. Кто-нибудь может мне что-нибудь рассказать об этом?

6
задан Dan Fego 3 February 2012 в 17:58
поделиться