Всем привет! Мне надо выделять, очищать память небольшими блоками с атрибутами PAGE_EXECUTE_READWRITE, все что делает HeapAlloc. Есть ли такой менеджер памяти или надо писать его самостоятельно.
Выдели большой кусок памяти с помощью VirtualAlloc и используй "плавающие" указатели, т.е. сначала указатель указывает на 0й байт памяти, выделяешь 100 байт, прибавляешь к указателю +100, надо очистить блок, -100, подходит, конечно, не для всех задач.
Свою вариацию на эту я прекрепил. Это фрагмент моей курсовой написан на чистом ANSI C, без использования библиотек и глобальных переменных (это были условия препода). Можно создавать несколько независимых куч. Я там реализованно пару трюко в что-бы предотвратить фрагментацию памяти. Код рабочий на 100% и там но в нем нет коментариев(просто не думал что когда нибудь понадобится). В архиве 2 простых теста, и файл описания(кусок отчета по курсовой). Точто ты хочеш можно спомошью этого кода сделать так : Код (Text): #include<windows.h> #include "heap.h" int main(void) { SIZE_T heap_size = 1024; PVOID heap_mem = VirtualAlloc(NULL, heap_size, \ MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); HeapT* heap = createHeap(heap_mem, heap_size); // Аналог HeapCreate LPVOID ptr = getMem(heap, sizeof(DWORD));// Аналог HeapAlloc //память уже можно использовать freeMem(heap, ptr);// Аналог HeapFree // Аналога HeapDestroy нету т.к. код не захватывает ресурсы сист. // структура HeapT распологается в буфере который передется createHeap VirtualFree(heap_mem, 0, MEM_RELEASE); return 0; }
Если захочеш создать свой менеджер памяти то читай Д.Кнут - Искусство программирования том 1 раздел 2.5