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

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

[复制链接]
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

查看全部评分

toofree 回答时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版