Не понимаю, зачем вообще резервировать память? Объясните плиз... Сразу пишу: invoke VirtualAlloc, 0 , 100*1024, MEM_COMMIT, чтение и запись .if eax ;проверяем на ошибку... mov bufer , eax ; сохраняем адрес .......... теперь выполняю код... и уничтожаю память: ...MEM_DECOMMIT.........
TOLSTOPUZ Возможность резервировать память нужна как минимум ради возможности довыделения последовательно идущих страниц памяти. Если Вы не знаете, нужно ли Вам сто мегабайт непрерывной памяти, но есть вероятность, что в процессе выполнения программы они понадобятся, то Вы резервируете память размером в сто мегабайт. Это не приводит к реальному выделению физической памяти, но оставляет за Вами возможность довыделить необходимую физическую память при необходимости и обеспечить при этом непрерывность выделенной памяти в пределах адресного пространства процесса. И MEM_DECOMMIT - это не уничтожение. Уничтожение - это MEM_RELEASE.
Нужно например для создания высокопроизводительных аллокаторов памяти. Если нужен большой массив, размер которого нужно увеличивать динамически не копируя данные при каждом изменении размера
А что же у меня тогда делает invoke Virtualfree , MEM_DECOMMIT как не уничтожает реально выделенный кусок памяти?
Ага... MEM_DECOMMIT переводит выделенную память в резервированное состояние, не освобождая её. Однако интересно...
не заморачивайся выделяй через VirtualAlloc(0,size,MEM_RESERVE|MEM_COMMIT,PAGE_*) освобождай через VirtualFree(adr,0,MEM_RELEASE) для большинства случаев этого вполне достаточно...