自动变量和寄存器变量在优化之后的存储问题。

suanmeilizhi 2011-12-17 02:31:36

看到APUE第七章,longjmp的例子,书上说,进行优化之后,自动变量和寄存器变量都存放在寄存器中,但是我用objdump发现,优化之后的自动变量和寄存器变量直接被立即数代替了,并不是书上说的情况,这个现象怎么解释?
...全文
148 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
狂且 2011-12-18
  • 打赏
  • 举报
回复
自动变量是不一定会放到寄存器中的,

因为寄存器数目是一定的 ,

就算你声明成 register 的变量, 结果也是可选的.

到最后也不一定会把它放进寄存器中. 更何况其他的类型 ??

就算是经过很牛优化了. 毕竟寄存器数目是固定的.

楼主书中应该有"可能""可选的"等字样.

我是这么认为的..........楼主再看看上下文?
AnYidan 2011-12-17
  • 打赏
  • 举报
回复
没有人敢保证优化后自动变量会在寄存器中
qq120848369 2011-12-17
  • 打赏
  • 举报
回复
带跳转的注意siglongjump(从信号处理跳出)取代longjump, 另外相关变量加volatile.
iamnobody 2011-12-17
  • 打赏
  • 举报
回复
看书不是这么看的。。。

自动变量和寄存器变量都存放在寄存器中//这句话要么不是出自好书,要么就是上下文还有别的语境。

寄存器就那么几个,变量的数目是没有限制的,所以很多时候,必须要用内存来保存数据。


优化成立即数,,这个肯定会的,因为这个立即数是直接或间接出现在你的程序中的常数。编译器只是优化掉了中间过渡的复制过程,直接将参数传到目的地。(这个优化一般编译器都能想到)
daviddb7 2011-12-17
  • 打赏
  • 举报
回复
优化这事很难说啊,编译器不一样,优化选项不一样,优化级别不一样,都有可能导致结果不同。
别说是变量的位置,连代码逻辑都有可能改掉。
所以你也别纠结在优化结果的问题上了。
suanmeilizhi 2011-12-17
  • 打赏
  • 举报
回复
自己顶,这样的问题都没人回答么。。。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧