VitrualAlloc vs new/malloc
От: CannyMan  
Дата: 06.10.11 04:48
Оценка:
С помощью 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 нет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.