社区
C语言
帖子详情
自动变量和寄存器变量在优化之后的存储问题。
suanmeilizhi
2011-12-17 02:31:36
看到APUE第七章,longjmp的例子,书上说,进行优化之后,自动变量和寄存器变量都存放在寄存器中,但是我用objdump发现,优化之后的自动变量和寄存器变量直接被立即数代替了,并不是书上说的情况,这个现象怎么解释?
...全文
148
6
打赏
收藏
自动变量和寄存器变量在优化之后的存储问题。
看到APUE第七章,longjmp的例子,书上说,进行优化之后,自动变量和寄存器变量都存放在寄存器中,但是我用objdump发现,优化之后的自动变量和寄存器变量直接被立即数代替了,并不是书上说的情况,这个现象怎么解释?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
自己顶,这样的问题都没人回答么。。。
C++
变量
总结 说明各种
变量
在C语言中,
变量
是对程序中数据所占用内存空间的一种抽象,定义
变量
时,用户定义
变量
的名,
变量
的类型,这是
变量
的操作属性。不仅可以通过
变量
名访问该
变量
,系统还通过该标识符确定该
变量
在内存空间的位置。在计算机中,保存
变量
当前值的
存储
单元有两类,一类是内存,另一类是CPU中的
寄存器
,
变量
的
存储
属性就是讨论
变量
的
存储
位置的,C语言中定义了四种
存储
属性,即
自动
变量
、外部
变量
、静态
变量
和
寄存器
变量
,它关系到
变量
在内存中的存放位置,由此决定了
变量
的值保留的时间和
变量
的作用范围,这就是生存期和作用域的概念。
C语言、
变量
和函数的作用域与生存期
详细介绍了C语言中 函数和
变量
的作用域 和生存期 他们的各种使用情况、、
存储
类型说明有四种。 auto
自动
变量
。 register
寄存器
变量
。 extern 外部
变量
。 static 静态
变量
C语言基础知识
变量
的作用域和
存储
方式详细介绍
变量
的作用域和
存储
方式 1.简述
变量
按作用域的分类
变量
按作用域分:分为全局
变量
和局部
变量
全局
变量
:在所有函数外部定义的
变量
叫做全局
变量
全局
变量
的使用范围:从定义位置开始到下面整个程序结束 局部
变量
:在一个函数内部定义的
变量
或者函数的形式参数统称为局部
变量
局部
变量
的使用范围:在函数内部定义的
变量
只能在本函数内部进行使用 2.简述
变量
按
存储
方式的分类 静态
变量
自动
变量
寄存器
变量
[
寄存器
就是cpu内部可以
存储
数据的一些硬件东西] 3.简述全局
变量
和局部
变量
命名冲突的
问题
1>在一个函数内部不能定义两个一样的局部
变量
2>在一个函数内部如果定义的局部变
第4章
变量
的
存储
类型
4.1 概述 4.2
自动
型
变量
[auto] 4.3
寄存器
型
变量
[register] 4.4 外部参照型
变量
[extern] 4.5 静态型
变量
[static] 4.6
存储
类型小结
深入理解C++中
变量
的
存储
类别和属性
C++
变量
的
存储
类别(动态
存储
、静态
存储
、
自动
变量
、
寄存器
变量
、外部
变量
) 动态
存储
方式与静态
存储
方式 我们已经了解了
变量
的作用域。作用域是从空间的角度来分析的,分为全局
变量
和局部
变量
。
变量
还有另一种属性——
存储
期(storage duration,也称生命期)。
存储
期是指
变量
在内存中的存在期间。这是从
变量
值存在的时间角度来分析的。
存储
期可以分为静态
存储
期(static storage duration)和动态
存储
期(dynamic storage duration)。这是由
变量
的静态
存储
方式和动态
存储
方式决定的。 所谓静态
存储
方式是指在程序运行期间,系统对
变量
分配固定的
存储
空间。而动态
存储
C语言
69,373
社区成员
243,079
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章