Мasm32. Локальная переменная

Тема в разделе "WASM.BEGINNERS", создана пользователем zdm, 19 янв 2017.

  1. zdm

    zdm New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2017
    Сообщения:
    3
    Вопрос простейший, но ведь это раздел для новичков.
    Есть процедура:
    Код (Text):
    1.  
    2. MyProc proc
    3. LOCAL string[100]:BYTE
    4.  
    5.   ret
    6. MyProc endp
    7.  
    Как видим в коде выделен локальный буфер в 100 байт.
    Вопрос: Освобождается ли эта память при выходе из процедуры?
    Если использовать ее скажем миллион раз будет утечка памяти?
    Или лучше alloc и затем free?
     
  2. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    701
    После выхода из процедуры, вызывается эпилог и стек правится, считай память освобождается, но чтобы большие объемы стека выделять, в пе хедере стек коммит и стек аллокейт большой должен быть. То есть если для большого кол-ва памяти лучше или хип выделять или виртуалаллок использовать. Если переменных не много, то стек лучше он побыстрее будет
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Размер буфера ограничен размером страницы(4к), иначе будет обращение за пределы сторожевой страницы без расширения стека, что приведёт к крэшу. Конечно же можно стек прочитать в цикле, но это нужно сделать до вызова процедуры.
     
  4. zdm

    zdm New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2017
    Сообщения:
    3
    Резюмирую: Использовать можно. Просто и быстро, но не стоит злоупотреблять. Не более 4к.
    Спасибо большое.
     
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    zdm,

    Не особо просто, это буфер с особыми свойствами, не такой как оычная область памяти. Во первых такой буфер локален для потока, тоесть при возврате из процедуры он существовать уже не будет. Во вторых выше буфера расположена рабочая железячная инфа, к примеру адреса возврата и при переполнении буфера адерса возврата перетираются, возможно на произвольные адреса.
     
  6. zdm

    zdm New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2017
    Сообщения:
    3
    Да я примерно представляю картину. Во всяком случае сейчас после подсказки.
     
  7. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия