HeapAlloc с атрибутами PAGE_EXECUTE_READWRITE

Тема в разделе "WASM.WIN32", создана пользователем Android, 2 авг 2006.

  1. Android

    Android New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    183
    Адрес:
    Ukraine
    Всем привет!
    Мне надо выделять, очищать память небольшими блоками с атрибутами PAGE_EXECUTE_READWRITE, все что делает HeapAlloc. Есть ли такой менеджер памяти или надо писать его самостоятельно.
     
  2. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    Я о таком не слышал.
    Вобще-то функция в пару сток.
     
  3. Coban

    Coban New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2006
    Сообщения:
    5
    Выдели большой кусок памяти с помощью VirtualAlloc и используй "плавающие" указатели, т.е. сначала указатель указывает на 0й байт памяти, выделяешь 100 байт, прибавляешь к указателю +100, надо очистить блок, -100, подходит, конечно, не для всех задач.
     
  4. Dromok

    Dromok New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2006
    Сообщения:
    2
    Адрес:
    Украина г.Харьков
    Свою вариацию на эту я прекрепил.
    Это фрагмент моей курсовой написан на чистом ANSI C, без использования библиотек и глобальных переменных (это были условия препода).
    Можно создавать несколько независимых куч.
    Я там реализованно пару трюко в что-бы предотвратить фрагментацию памяти.
    Код рабочий на 100% и там но в нем нет коментариев(просто не думал что когда нибудь понадобится).
    В архиве 2 простых теста, и файл описания(кусок отчета по курсовой).
    Точто ты хочеш можно спомошью этого кода сделать так :
    Код (Text):
    1. #include<windows.h>
    2. #include "heap.h"
    3.  
    4. int main(void)
    5. {
    6.     SIZE_T heap_size = 1024;
    7.     PVOID heap_mem = VirtualAlloc(NULL, heap_size, \
    8.         MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    9.     HeapT* heap = createHeap(heap_mem, heap_size); // Аналог HeapCreate
    10.     LPVOID ptr = getMem(heap, sizeof(DWORD));// Аналог HeapAlloc
    11.     //память уже можно использовать
    12.     freeMem(heap, ptr);// Аналог HeapFree
    13.     // Аналога HeapDestroy нету т.к. код не захватывает ресурсы сист.
    14.     // структура HeapT распологается в буфере который передется createHeap
    15.     VirtualFree(heap_mem, 0, MEM_RELEASE);
    16.     return 0;
    17. }
     
  5. Dromok

    Dromok New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2006
    Сообщения:
    2
    Адрес:
    Украина г.Харьков
    Если захочеш создать свой менеджер памяти то читай
    Д.Кнут - Искусство программирования том 1 раздел 2.5
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Здесь обсуждалось.