当前位置: 首页 > 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.zskr.cn/news/56573.html

相关文章:

  • 2025襄阳装修公司排名与推荐,从设计到售后的全维度参考
  • 留学机构比较新视角 2025十大机构文本与申请结果排名
  • 2025 年11月天津电线电缆优质厂家 TOP10 推荐:含塑料绝缘控制 / 柔性拖链 / 软电缆/铝电缆 /架空绝缘 /绝缘 /屏蔽等多品类电缆生产厂家盘点
  • 综合评分榜单,表现最亮眼的十大留学机构盘点
  • 2025年淮安婚纱摄影品牌排行:专业与口碑双重认证,弥素摄影领跑
  • 专业淮安婚纱摄影摄影店2025年排行:弥素摄影专业领衔
  • ai写论文工具推荐:提升学术创作效率的实用选择
  • P14534 [RMI 2018] W
  • 微店平台关键字搜索接口深度解析:从 Token 动态生成到多维度数据挖掘
  • 2025年电磁采暖炉品牌厂商权威推荐榜单:电磁感应采暖炉/节能电磁采暖炉/高频电磁采暖炉设备源头厂家精选
  • 新疆防火涂料十大品牌权威推荐!覆盖乌鲁木齐、喀什、伊犁、和田、哈密、克拉玛依、吐鲁番、昌吉、阿克苏、阿勒泰、塔城,源头厂家品质之选,筑牢建筑安全防线
  • 2025 最新搬家公司推荐!全国同城 / 长途 / 国际 / 日式搬家公司排行榜,专业靠谱服务商精选汇总
  • 2025年杭州口碑好的GEO优化实力厂家有哪些,GEO优化服务/GEO优化AI工具排名/会展服务/节目内容策划制作GEO优化实力厂家选哪家
  • 2025 年矿山煤矿专用电缆生产厂家 TOP10 推荐:中低压 / 变频 / 聚乙烯 / 聚氯乙烯绝缘电缆优选企业
  • iOS 上架 App 得多钱?从开发者账号、构建环境到分发成本的完整成本结构分析
  • 【LVGL】平铺视图部件
  • 2025 最新气模厂家口碑推荐榜:国际协会权威测评,优质品牌全方位解析气模滑梯/气模闯关/气模冲关/气模帐篷/气模充气城堡/气模卡通/气模水上闯关公司推荐
  • 2025年液压车身平衡杆批发厂家权威推荐榜单:SUV车身平衡杆/MPV车身平衡杆/新能源车身平衡杆源头厂商精选
  • 【压测数据分享】VictoriaLogs 中使用 elasticsearch 格式写入对比 jsonline 格式写入的性能差异
  • 红米note 10 miui dev 13 magisk root权限后burp证书安装
  • 2025 最新电磁流量计厂家推荐榜:覆盖高精度 / 大口径 / 物联网等多场景,权威测评优选品牌插入式/浆液电磁流量计/电磁流量计表头公司推荐
  • 质量的科学奠基:当统计学走进工厂车间
  • docker配置wordpress和mysql
  • 2025少儿编程学习机构哪家好?5大优质品牌推荐及家长选择指南
  • 江苏抗17级台风抗风卷帘门厂家排名哪家靠谱
  • 江苏抗17级台风抗风卷帘门厂家排名前十哪家靠谱
  • 2025 年 11 月高校食堂承包,工厂食堂承包最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • 江苏抗17级台风抗风卷帘门厂家排名前十哪家好
  • 2025年规模大型纸箱源头厂家权威推荐榜单:化妆品纸箱/包装纸箱/瓦楞纸箱供应商精选
  • 膜电极外观缺陷检测设备技术应用与行业发展现状