当前位置: 首页 > news >正文

一次编译器优化的陷阱

本文分享自天翼云开发者社区《一次编译器优化的陷阱》.作者:江****禄

某次问题排查,最终隐掉完所有业务逻辑后, 化简为如下的简单代码:

来看一下,这个的bcount is zero 会打印吗?
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <string.h>
#include <unistd.h>int
main(void)
{int bcount = 2;while (bcount < 1296005092) {if (bcount < 1296005092) {printf("b %lld (%d)%x is <  than %lld\n",bcount,bcount, bcount,1296005092);} else {printf("b %lld (%d)%x is >= than %lld\n",bcount,bcount,bcount, 1296005092);}sleep(1);if (bcount == 0) {printf("bcount is zero\r\n");return -1;}bcount *= 2;}return 0;
}

 

这个demo代码的逻辑为:

while循环中比较bcount与1296005092的大小,当bcount >=1296005092或者 bcount为0,结束循环。

使用gcc  -O2优化编译后,查看demo程序的输出如下,可以看到,会导致一直在while死循环, 原因是bcount为int 。 然后待比较的那个数 刚好卡

在一个区间,具体如下:当bcount ==0x80000000时候,bcount最高位为1, 这样该数为负数,小于待比较的数1296005092,注意:

上一次循环中,由于上一个值0x40000000的时候刚好比1296005092小,然后此次循环结果为负数,而下一个循环这个int溢出结果为0 ,所以一直

卡在这里。那么问题就变成了:其中的bcount==0 不会生效??

 

使用-O1编译后,查看demo代码的输出如下, 可以看到while循环中可以判断到bcount为0.

 

结论

简化代码,对比两者汇编代码的区别如下,

可以看到在gcc的O2优化等级上,如果是乘2运算,优化后的代码认为结果不应该为0。

到此为止,这里如果将代码中的bcount乘2运算,替换为左移一位,在O2模式下编译,while循环也可以正常退出。

这里应该是gcc的O2等级以上优化逻辑有bug,在整数乘法运算下,编译器认为不可能出现结果为0,将代码中与0的判断优化掉,导致优化后的代码

逻辑不符合预期。

http://www.jsqmd.com/news/46880/

相关文章:

  • 2025襄阳装修公司排名与推荐,从设计到售后的全维度参考
  • 留学机构比较新视角 2025十大机构文本与申请结果排名
  • 2025 最新制造业系统服务商权威推荐榜:国际协会测评认证 + 5000 + 政企案例背书,制造业生产管理系统/制造业进销存系统/制造业 MES 系统/制造业工单系统服务商推荐
  • 2025 年11月天津电线电缆优质厂家 TOP10 推荐:含塑料绝缘控制 / 柔性拖链 / 软电缆/铝电缆 /架空绝缘 /绝缘 /屏蔽等多品类电缆生产厂家盘点
  • 易路人才薪酬专家Agent赋能全球知名智能家居品牌:AI驱动的薪酬管理新范式
  • 超越生产:质量关口的“前移”与田口方法
  • 2025佛山出口退税公司排名与推荐:36个月申报期不踩坑,这样选机构退税快又稳
  • 南通一对一家教机构推荐:2026南通最新课外辅导口碑排行榜
  • 综合评分榜单,表现最亮眼的十大留学机构盘点
  • 品牌评比结果公布,留学中介排行榜TOP10值得选择
  • 【重磅】2025两院院士增选揭晓:144位顶尖专家入选,AI、芯片与量子技术成最大赢家!
  • 2025年淮安婚纱摄影品牌排行:专业与口碑双重认证,弥素摄影领跑
  • nc测试连接稳定性
  • 深入解析:【GD32】输出时钟配置
  • 留学中介排名TOP10服务体验评选,这家学生最满意
  • 专业淮安婚纱摄影摄影店2025年排行:弥素摄影专业领衔
  • 手眼标定:两种方式求解x的区别
  • 2025年度少儿编程教育机构权威评测:科学体系与竞赛成果双轨制分析
  • ai写论文工具推荐:提升学术创作效率的实用选择
  • Git 快进合并问题排查:为什么我的分支出现了其他分支的提交?
  • P14534 [RMI 2018] W
  • 降ai率免费工具推荐:提升文本原创性的实用选择
  • 微店平台关键字搜索接口深度解析:从 Token 动态生成到多维度数据挖掘
  • 2025年电磁采暖炉品牌厂商权威推荐榜单:电磁感应采暖炉/节能电磁采暖炉/高频电磁采暖炉设备源头厂家精选
  • 新疆防火涂料十大品牌权威推荐!覆盖乌鲁木齐、喀什、伊犁、和田、哈密、克拉玛依、吐鲁番、昌吉、阿克苏、阿勒泰、塔城,源头厂家品质之选,筑牢建筑安全防线
  • 2025 最新搬家公司推荐!全国同城 / 长途 / 国际 / 日式搬家公司排行榜,专业靠谱服务商精选汇总
  • 2025年路灯品牌权威推荐榜单:太阳能路灯/市电路灯/高杆灯供应商精选
  • 2025 年 11 月铁路地铁电缆厂家 TOP 推荐:覆盖电力、中压低压、变频、聚乙烯 / 聚氯乙烯绝缘电缆
  • 2025 年矿山煤矿专用电缆生产厂家 TOP10 推荐:中低压 / 变频 / 聚乙烯 / 聚氯乙烯绝缘电缆优选企业
  • 2025年广东到印度专线双清包税ddp平台权威推荐榜单:广东到印度专线双清包税机构/广东空运到印度物流/广东空运到印度专线服务商精选