автоматическая переменная и регистровая переменная - оптимизированы одинаково? - PullRequest
1 голос
/ 17 декабря 2011

Я читаю APUE, и когда я пришел к longjmp, возник вопрос. В книге говорится, что перед оптимизацией и автоматическая переменная, и переменная регистров хранятся в памяти, а после оптимизации они сохраняются в регистре. Но когда я использую objdump -S a.out, я обнаружил, что оба они стали непосредственным операндом. Так ?

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

Ваша книга просто упрощалась.Даже до оптимизации нет гарантии, что переменные будут реализованы в памяти.Разница между auto и register заключается только в том, что вам не разрешено брать адрес переменной register.Компилятор C может делать все, что ведет себя так же, как абстрактная машина.

То, что ваш компилятор воспринимает эти переменные как непосредственные значения, указывает на то, что значения, которые у вас есть, малы и являются константами времени компиляции.Таким образом, вы, вероятно, могли бы объявить их const или даже как enum константы.

1 голос
/ 17 декабря 2011

Таким образом, программа очень проста, и компиляторы стали намного умнее, так как книга была написана.

0 голосов
/ 17 декабря 2011

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

...