编译器能完成?运算符中公共条件的优化吗?

cfvmario 2011-07-18 02:45:41
例如

a=(x>5)?c+d:e+f;
b=(x>5)?g+h:i+j;

要不要改成

if (x>5)
{
a=c+d:
b=g+h;
}
else
{
a=e+f;
b=i+j;
};
...全文
113 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xunxun 2011-07-18
  • 打赏
  • 举报
回复
vc对这类展开式的结构优化都不擅长,如果开启了pgo优化后还有可能判断分支。
而这个正是gcc的优势。
mLee79 2011-07-18
  • 打赏
  • 举报
回复
我试了下 gcc -O1 -O2 -O3 都优化, arm-gcc 也是... VC6 2K3 2K5 -O2 -Ox 都没优化...
2011-07-18
  • 打赏
  • 举报
回复
gcc 在 -O2 下优化了。
mLee79 2011-07-18
  • 打赏
  • 举报
回复
试了下, VC 没优化, gcc 优化了的.
  • 打赏
  • 举报
回复
试了一下 至少VC没优化
cfvmario 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lifesider 的回复:]
你的变量较多,32位下可操作寄存器不够分配,所以无法优化
使用第二种写法吧,也好看些
[/Quote]
我是随便举例,毕竟主要是x>5会不会被重复判断跳转的问题
实际代码变量没这么多,不过加了一些运算
lifesider 2011-07-18
  • 打赏
  • 举报
回复
你的变量较多,32位下可操作寄存器不够分配,所以无法优化
使用第二种写法吧,也好看些
2011-07-18
  • 打赏
  • 举报
回复
先不考虑优化的问题,你不觉得第二种更好看么……

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧