1

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

4

3 回答 3

2

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

您的编译器将这些变量实现为即时变量表明您拥有的值很小并且是编译时常量。因此,您可能一开始就可以将它们声明constenum常量。

于 2011-12-17T07:57:04.410 回答
1

所以这个程序非常简单,而且自从本书写完后,编译器也变得更加智能。

于 2011-12-17T07:30:27.610 回答
0

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

于 2011-12-17T07:25:05.660 回答