память и флаг MEM_RESERVE

Тема в разделе "WASM.BEGINNERS", создана пользователем TOLSTOPUZ, 21 дек 2008.

  1. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Не понимаю, зачем вообще резервировать память? Объясните плиз...

    Сразу пишу:
    invoke VirtualAlloc, 0 , 100*1024, MEM_COMMIT, чтение и запись
    .if eax ;проверяем на ошибку...
    mov bufer , eax ; сохраняем адрес

    .......... теперь выполняю код...

    и уничтожаю память:
    ...MEM_DECOMMIT.........
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    TOLSTOPUZ
    Возможность резервировать память нужна как минимум ради возможности довыделения последовательно идущих страниц памяти.
    Если Вы не знаете, нужно ли Вам сто мегабайт непрерывной памяти, но есть вероятность, что в процессе выполнения программы они понадобятся, то Вы резервируете память размером в сто мегабайт. Это не приводит к реальному выделению физической памяти, но оставляет за Вами возможность довыделить необходимую физическую память при необходимости и обеспечить при этом непрерывность выделенной памяти в пределах адресного пространства процесса.
    И MEM_DECOMMIT - это не уничтожение. Уничтожение - это MEM_RELEASE.
     
  3. scf

    scf Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    386
    Нужно например для создания высокопроизводительных аллокаторов памяти. Если нужен большой массив, размер которого нужно увеличивать динамически не копируя данные при каждом изменении размера
     
  4. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    А что же у меня тогда делает
    invoke Virtualfree , MEM_DECOMMIT
    как не уничтожает реально выделенный кусок памяти?
     
  5. scf

    scf Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    386
    мсдн?
    если своего нет, то есть гугль по онлайн-версии
     
  6. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Ага... MEM_DECOMMIT переводит выделенную память в резервированное состояние, не освобождая её.
    Однако интересно...
     
  7. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    не заморачивайся
    выделяй через VirtualAlloc(0,size,MEM_RESERVE|MEM_COMMIT,PAGE_*)
    освобождай через VirtualFree(adr,0,MEM_RELEASE)
    для большинства случаев этого вполне достаточно...