O2 优化掉了需要跑的地方
  • 板块学术版
  • 楼主王熙文
  • 当前回复35
  • 已保存回复35
  • 发布时间2022/8/15 22:39
  • 上次更新2023/10/27 15:13:47
查看原帖
O2 优化掉了需要跑的地方
353688
王熙文楼主2022/8/15 22:39

我写了一个函数,是对一个 __int128 类型的数(在最开始 #define int __int128 了)的质因子分解。

code

这份代码在 C++20 O2 下输出了 fac: 2 1 2。这显然不合理,因为 8=238=2^3。正常的输出应当是:fac: 2 3 8,这也是不开 O2 下输出的。

而如果我在 O2 下取消注释注释的那两行,也就是让代码强制执行 while 循环,输出就是正常的了。

由此可以推断,O2 将中间的部分优化掉了(只执行一遍)。

然而,如果我的所有变量不开 __int128,开 O2 且加注释的输出也没问题。这是不是可以理解为,O2 对新加的 __int128 的部分优化处理挂了,导致出现了这个问题?

如果在正式比赛中,可以放心使用 O2 + __int128 吗?

2022/8/15 22:39
加载中...