С помощью VirtualQuery выяснил самый большой регион свободной памяти MEM_FREE.
Адрес в соответствие с гранулярностью.
Вызываю VirtualAlloc передавая этот максимальный размер — всё ОК — функция вернула адрес по которому выделила память.
PVOID va = VirtualAlloc(NULL, size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
Заменяю эту строку на
char * arr = new char[size];
рассчитывая таким образом выделить память в куче.
Получаю облом — кидается исключение bad_alloc.
То же самое с malloc.
Экспериментально выяснил, что память будет успешно выделяться если задать size = size — 84;
Откуда взялись эти лишние байты? Почему VirtualAlloc с этим размером нормально выделяет память, а malloc нет?