Правильно ли предположить, что начальное значение локальной переменной равно нулю? - PullRequest
0 голосов
/ 11 сентября 2009

Если у меня есть процедура вызова на asm:

push ebp
mov ebp esp
sub ebp, 8

Могу ли я прямо сейчас предположить, что оба [ebp-4] и [ebp-8] инициализированы нулем, или они могут иметь случайные значения?

Ответы [ 4 ]

7 голосов
/ 11 сентября 2009

Они будут иметь любое значение, которое было в этой памяти раньше, что вряд ли будет 0. Это не «случайное» само по себе - действительно, это, вероятно, несколько предсказуемо; это обычно не приносит пользы, но просто не получайте никаких умных идей об использовании его для ГСЧ:)

Помните, все, что вы сделали в этом коде, было:

  • Сохранить текущее значение EBP в [ESP], затем вычесть 4 из ESP
  • Копировать ESP в EBP
  • Вычтите 8 из EBP (вы имели в виду ESP?)

Процессор не будет ничего читать, кроме случаев, когда вы это скажете. В этом суть ассемблера. Более того, при использовании в обычной арифметике ESP вообще не является специальным регистром - это просто число.

5 голосов
/ 11 сентября 2009

вы никогда не должны зависеть от этого, так как это может зависеть от реализации. чтобы быть в предсказуемом состоянии, всегда инициируйте регистр или ячейку памяти с определенным значением.

3 голосов
/ 11 сентября 2009

Они определенно будут иметь случайные значения, если вы их явно не инициализируете.

2 голосов
/ 11 сентября 2009

Они будут иметь случайные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...