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

时间:2011-12-17 07:17:05

标签: c compiler-optimization longjmp

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

3 个答案:

答案 0 :(得分:2)

你的书只是简化了。即使在优化之前,也无法保证变量在内存中实现。 autoregister之间的区别仅在于您不允许获取register变量的地址。 C编译器可以执行与抽象机器相同的任何操作。

你的编译器将这些变量实现为immediats表明你所拥有的值很小并且是编译时常量。所以你可能首先声明它们const或甚至enum常量。

答案 1 :(得分:1)

因此程序非常简单,编写本书后,编译器变得更加智能。

答案 2 :(得分:0)

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