Code (Text): .data? var db 64 dup(?) При выполнении программы переменная var будет заполнена нулями или случайными данными ?
не факт. Я на практике сталкивался с ненулевыми значениями. В моем случае был объявлен сегмент обычного класса 'DATA', но он был объявлен так, что находился в конце карты сегментов (файл *.map) и не содержал ни одного инициализованного значения, в исполняемый файл включен не был. Вот он после запуска содежал ненулевые значения. Если я не ошибаюсь, секция .data? объявляет класс сегментов 'BSS'. При определенном порядке расположения сегментов, данные этой секции, вероятно, не будут включены в .ехе и, вероятно, не будут инициированы нулями.
Локальные переменные объявляются в стеке при входе в процедуру путем вычитания из ESP нужного значения. Обнуления куска стека, отведенного под эти локальные переменные, так же не происходит.
integer локальные переменные выделяются в стеке. Тут зависит все от того какую часть памяти выделит ОСь для стека вашей программы. Чаще не нули. Конечно можно установить адрес стека, скажем на неинициализированный массив. Тогда будут нули. Code (Text): .data n_stack dd ? .code start: mov [n_stack], esp ; сохраняем оригинальный адрес mov esp, p_stack ... mov esp, [n_stack] ; восстанавливаем о. а. xor eax, eax ret ... .data? v_stack db (1024*1024) dup(?) ; 1 мегабайт под стек p_stack dd ?
Barbos Будут, т.к. если размер секции в файле = 0, то винда сама под нее выделит память и заполнит нулями. Точнее сказать - винда всегда представляет процессу только обнуленные страницы физ.памяти и только потом, если страница проецируется на файл, то в нее пишутся данные из файла.
SloT Физическая память выделяется по требованию как для неинициализированных, так и для инициализированных данных и кода, т.к. рулит механизм обычного файл-маппинга - "не чеши пока не чешется" Arthur, 2FED Память под стек также выделяется по требованию (о сторожевой странице стека наверное слышали . Поэтому в сл.локальных переменных все зависит от того сколько памяти под стек уже было выделено и использовано до входа в функцию и сколько памяти выделяется под локальные переменные - если выделяется много и требуется выделение доп.страниц памяти, то эти доп.страницы будут обнуленными. Но в общем сл.на это расчитывать ес-но нельзя, если только для каких то "спецзадач"