ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 апреля
1139282 Топик полностью
=AlexD= (18.10.2021 08:54, просмотров: 212) ответил Guest на Все операции проводятся в регистрах. Но дело в том, что auto-переменная в памяти вполне может и не размещаться, если для п/п регистров процессора достаточно. Именно поэтому при входе в подпрограмму у auto-переменных значение не определено.
У вас каша в голове. Вопрос не в размещении переменной, а в её использовании. 

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

И метод её размещения не имеет значения, хоть static, хоть global, хоть auto. Размещение определяет место в памяти и область видимости, но для оптимизатора это не особо важно.

Volatile заставляет оптимизатор читать/писать память, при каждом появлении переменной в программе, даже в цикле! Где она размещена - пофигу, в глобальной области, в куче, на стеке (для auto), не важно.

надо придумать объяснение этому мудизму, иначе рехнуться можно