Ф-ция выдает такую вот ошибку. Если вместо нее в олли пишу VirtualAlloc того же размера, то память выделяется без ошибок. Можно на пальцах объяснить разницу в этих ф-циях и почему вылезает данная ошибка? Код (Text): push 0 push 1000h push 0 Call HeapCreate Ошибка ERROR_NOT_ENOUGH_MEMORY Код (Text): push PAGE_EXECUTE_READWRITE push MEM_COMMIT push 1000h push 0 call VirtualAlloc в еах - начало памяти.
Попробовал зациклить твой первый код; выполнено 7F8Dh циклов, затем память исчерпана - ошибка ERROR_NOT_ENOUGH_MEMORY, сразу за этим вызвал твой второй код - таже ошибка.
Дык первое создаёт объект "куча" (хэндл), а второе отъедает из АП память (адрес). На всё накладываются свои ограничения.
ClerkСпасибо. Значит, если у меня в процессе память все-таки есть, раз VirtualAlloc ее выделяет и ошибка в чем-то другом. asmfanНу так, судя по названию ошибки нехватает именно памяти в АП процесса для создания объекта "куча". Надо подумать...
Ради интересу залез в отладчик - при каждом вызове выделяется/резервируется 3 страницы, даже если и указана всего 1 и у меня вышло ограничение на 7F85h вызовов, что есть 383MiB, но(!) такого в природе не бывает, т.к. никому не нужно создавать столько куч, когда можно использовать дефолтную process heap. Т.о. только кривой алгоритм может надорваться даже на таких ограничениях!
asmfan Значит, тогда поподробнее. Есть две программы - пропатченная и чистая. Когда в пропатченной программе выполняется мой код, а затем управление передается основному коду, то возникает ошибка при выполнении данной ф-ции. Если запустить в отладчике чистую прогу, то никакой ошибки не будет и программа нормально отработает. Параметры данным ф-циям передаются совершенно одинаковые. Думал, может в моем коде где-то происходит утечка памяти, вроде везед подчищаю за собой, и опять же, VirtualAlloc отрабатывает нормально... Непонятно... add. В моем коде ниразу не вызыватеся HeapCreate, только VirtualAlloc, после которого всегда вызывается VirtualFree.