C -自动变量和寄存器变量-优化相同



我正在阅读APUE,当我来到longjmp时,问题来了。在优化之前,自动变量和寄存器变量都存储在内存中,优化之后,它们存储在寄存器中,书上说。但是当我使用objdump -S a.out时,我发现它们都变成了直接操作数。所以呢?

你的书只是在简化。即使在优化之前,也不能保证变量在内存中实现。autoregister之间的区别只是不允许使用register变量的地址。C编译器可以做任何与抽象机器行为相同的事情。

你的编译器将这些变量视为直接变量,这表明你在那里的值很小,并且是编译时间常数。因此,您可能一开始就可以将它们声明为const甚至enum常量。

所以这个程序非常简单,而且自这本书出版以来,编译器也变得更聪明了。

所以你使用了不同的编译器,可能在不同的机器上,可能有不同的优化级别,除了编译器的行为不同之外,你基本上什么也不能得出结论,这使得很难编写一本在所有机器上的每个细节都准确的教科书。

最新更新