TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码
搜索到 1 篇与 的结果
2025-07-03

从汇编看优化:编译器删除了你的关键代码?,编译器汇编器

从汇编看优化:编译器删除了你的关键代码?,编译器汇编器
一、消失的延时函数上周同事老张遇到了一个诡异现象:在STM32嵌入式项目中,他精心设计的毫秒级延时函数突然失效。代码看似正常:c void delay_ms(uint32_t ms) { for(uint32_t i = 0; i < ms * 1000; i++) { __NOP(); // 执行空指令 } }但实际测试时,无论传入参数多大,延时都近乎为零。通过Keil的Disassembly窗口查看生成的汇编代码后,我们发现了更惊人的事实——整个循环体消失了!编译器直接把这个函数优化成了空函数。二、编译器为何"自作主张"现代编译器如GCC、Clang、Keil ARMCC都具备强大的优化能力。在-O2优化级别下,编译器会进行以下关键判断: 无副作用代码消除:当循环体没有对外部可见的影响(如内存修改、IO操作)时 死代码删除:计算结果未被使用的代码 常量传播:能计算出确定值的表达式会被替换 在我们的案例中,__NOP()虽然执行CPU空操作,但既不修改内存也不影响外设,整个循环就像不存在一样。三、破解优化迷局的三种武器1. volatile...
2025年07月03日
2 阅读
0 评论

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 强强强
    2025-04-07
  2. jesse
    2025-01-16
  3. sowxkkxwwk
    2024-11-20
  4. zpzscldkea
    2024-11-20
  5. bruvoaaiju
    2024-11-14

标签云