Всем доброго кодинга. Писал тут одну тулзень. Залез в Help к masm32.lib в пакете Masm8. Вижу описание Malloc. Но самой функи в библе почему-то не оказалось. А есть неописанная Alloc. C точно таким же единственным параметром. И обе IMHO работают с кучей. Это что описка или замена? Если замена, то для чего? З.Ы. В устаревших её тоже нет.
Возможно это рудимент. Исходники masm32.lib лежат в \masm32\M32LIB IMHO, лучше отказаться от использования M32LIB. Периодически в ней обнаруживаются баги, которые никто не спешит исправлять. К тому же, опять же IMHO, нет там ничего такого без чего нельзя обойтись. Я всю жизнь пользовался таким нехитрым кодом. Можно немного оптимизировать заведя глобальную переменную, в которой при первом вызове запоминать хендл хипа, чтоб каждый раз не звать GetProcessHeap. Код (Text): .code malloc proc dwBytes:DWORD ; allocates dwBytes from current process's heap ; and returns pointer to allocated memory block. ; HeapAlloc(GetProcessHeap(), 0, dwBytes) option PROLOGUE:NONE option EPILOGUE:NONE invoke GetProcessHeap invoke HeapAlloc, eax, 0, [esp+4] ret (sizeof DWORD) option PROLOGUE:PROLOGUEDEF option EPILOGUE:EPILOGUEDEF malloc endp free proc lpMem:LPVOID ; frees memory block allocated from current process's heap ; HeapFree(GetProcessHead(), 0, lpMem) option PROLOGUE:NONE option EPILOGUE:NONE invoke GetProcessHeap invoke HeapFree, eax, 0, [esp+4] ret (sizeof LPVOID) option PROLOGUE:PROLOGUEDEF option EPILOGUE:EPILOGUEDEF free endp
Four-F А я то думал что masm32.lib это один из козырей масма. Жаль конечно, что на неё забили.8-( Может создадим свою wasm_masm32.lib? 8-)
<font color="gray][ AsmGuru62</font><!--color--><font color="gray]: Скорее всего, это не даст оптимизации, а может даже дать обратный эффект. ]</font><!--color--> Очень может быть. Я как-то не зацикливался. Т.к. GetProcessHeap - это всего лишь три mov'a (по крайней мере под NT+), то я и не стал париться.
Booster > "А есть неописанная Alloc. C точно таким же единственным параметром. И обе IMHO работают с кучей" Описание см.в исходниках. На самом деле есть функция Alloc (из Alloc.asm) и макрос alloc (macros.asm). И то и другое - имхо фигня, т.к. Alloc работает через интерфейс ole32.CoGetMalloc, а alloc вызывает GlobalAlloc, которую сами микрософты не рекомендуют использовать. Так что пиши макрос или функцию с HeapAlloc и глобальной переменной для GetProcessHeap и наслаждайся Ну или плюнь на это дело )