Адресное пространство памяти процесса - PullRequest
0 голосов
/ 26 ноября 2011

Я знаю, что 32-битная Windows допускает для любого процесса максимум 2 ГБ адресного пространства памяти.2 гигабайта = 2147483648 байт.Я пытался выделить кучу памяти намного больше, чем 2147483648 байт, и я не увидел ни ошибки, ни исключения, вот код:

# include<iostream>

int main(){

    void *x=malloc(2147489999);
    free(x);
    system("pause");
    return 0;
}

в чем причина?

1 Ответ

5 голосов
/ 26 ноября 2011

Вы не проверяете возвращаемое значение:)

#include <windows.h>
#include <malloc.h>
#include <stdio.h>
#include<iostream>

#define PAUSE getchar

int 
main(int argc, char *argv[])
{
    void *x=malloc(2147489999);
    if (x)
    {
      printf ("malloc succeeded: 0x%x...\n", x);
      free(x);
    }
    else
    {
      perror ("malloc failed");
    }
    PAUSE ();
    return 0;
}

C: \ temp> \ bin \ vcvars32 Настройка среды для использования инструментов Microsoft Visual C ++.C: \ temp> notepad tmp.cpp

C: \ temp> cl 32-разрядный оптимизирующий компилятор C / C ++ для Microsoft (R) версии 12.00.8168 для 80x86 Copyright (C) Microsoft Corp 1984-1998.Все права защищены.

tmp.cpp ... /out:tmp.exe tmp.obj

C: \ temp> tmp malloc fail: ошибка отсутствует

...