gcc 优化问题

目前遇到的优化问题

  1. 字符串常量的合并

  2. 相同代码块中重复计算的合并

  3. 优化产生 bug 的问题示例

internal compiler error: in gsi_insert_seq_nodes_after, at gimple-iterator.c

  1. 段被删除,链接时报错,更甚者直接链接到了一个错误的地址

优化问题产生时的解决步骤

是否真的造成了问题

以结果来判定,对于上面提到的优化问题的第 2 点,虽然重复计算被合并,计算时间打印输出为 0,但是结果是正确的,所以这个现象就是正常的。

阻止编译器优化的方式

阻止一段区间内的代码优化

#pragma GCC push_options
#pragma GCC optimize ("O0")
 
code

#pragma GCC pop_options

上面的代码使用了 gcc 的特殊语法。第一个 pragma 将当前的编译选项入栈保存现场,第二个 pragma 重新设定优化参数为 O0,表示不进行任何优化。中间的内容就放你想要阻止优化的代码,最后一个 pragma 将之前保存的编译选项出栈,恢复现场。

阻止单个函数的优化

使用 attribute((optimize(“O0”))) 来完成。

使用示例:

void __attribute__((optimize("O0"))) test(void) {
    code
}

更详细的信息请访问——how to prevent gcc optimizeing some statements in c

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值