你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

常量定义在函数体内外,代码大小有区别

[复制链接]
dreamsyeah 提问时间:2018-6-24 11:41 /
在优化代码时,发现常量定义在函数体内,与函数体外,最终生成的目标代码大小不同。
特别是常量表很多时,差异很明显。放在函数体外,生成的目标代码更少。
有懂编译原理的大侠帮解释一下!


MCU:STM32F205RC
编译环境:MDK 5.14.0.0
使用FREERTOS系统

图3 生成的代码大小不同

图3 生成的代码大小不同

图2 常量定义在函数体内

图2 常量定义在函数体内

图1 常量定义在函数体内

图1 常量定义在函数体内
收藏 评论4 发布时间:2018-6-24 11:41

举报

4个回答
STM1024 回答时间:2018-6-25 09:34:34
通常作为全局变量的话,整个程序中只有一个副本,而且编译器会做一定的优化。然而如果定义在每个函数里面,进入函数需要为其分配地址,离开了又要回收,这些都需要有代码开销,而且很多时候还有push和pop的问题,所以肯定代码体积会有一定的膨胀。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

七哥 回答时间:2018-6-24 20:23:04
你这不符合套路呀,不发源码吗?
关键要看汇编,你只看C没用的。

强调一点,在这里const不要说成是常量,而应该是只读属性。
说成只读,你应该会明白点什么。函数中的为局部变量,离开函数自动注销,进函数时必须重新开辟。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

STM1024 回答时间:2018-6-25 11:54:47
toofree 发表于 2018-6-24 20:23
你这不符合套路呀,不发源码吗?
关键要看汇编,你只看C没用的。

其实const严格叫常量变量更好一点
lvpeng-1619958 回答时间:2018-6-25 14:46:30
建议吧汇编代码也一起贴出来 看看

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版