Задача - выделить максимальный непрерывный кусок памяти юзермодного пространства. Очевидное решение: Код (Text): sub esp,sizeof.MEMORYSTATUS mov [esp+MEMORYSTATUS.dwiLength],sizeof.MEMORYSTATUS invoke GlobalMemoryStatus,esp mov esi,[esp+MEMORYSTATUS.dwAvailVirtual] add esp,sizeof.MEMORYSTATUS @@: invoke VirtualAlloc,ebx,esi,MEM_RESERVE OR MEM_COMMIT,PAGE_READWRITE sub esi,1024*1024 ;мегабайтная граница куска памяти test eax,eax jz @B add esi,1024*1024 mov [_size],esi invoke VirtualFree,eax,ebx,MEM_RELEASE Есть ли более элегантное решение? //аттач - грубая мерилка скорости (ПСП) памяти. (треба SSE/SSE2)
Суть в том, что заранее то база выделения неизвестна, а если слать запросы на свободную память - то придётся перебирать все возможные адреса размещения памяти и при этом смотреть размеры кусков. А VirtualAlloc сама базу ищет. [added] В принципе достаточно флага MEM_RESERVE в VirtualAlloc.