c语言编译优化的对象,C ++中的常量和编译器优化

让我们忽略方法,只看const对象; 编译器在这里有更多的优化机会。如果一个对象被声明为const,那么(ISO / IEC 14882:2003 7.1.5.1(4)):除了可以修改声明为mutable(7.1.1)的任何类成员之外,任何在其生命周期内修改const对象的尝试(3.8)都会导致未定义的行为。

让我们忽略可能具有可变成员的对象 - 编译器可以自由地假设该对象不会被修改,因此它可以产生重要的优化。这些优化可以包括以下内容:将对象的值直接合并到机器指令操作码中

完全消除永远无法访问的代码,因为const对象用于编译时已知的条件表达式

如果const对象控制循环的迭代次数,则循环展开

请注意,只有当实际对象是const时,这个东西才适用 - 它不适用于通过const指针或引用访问的对象,因为这些访问路径可能导致非const的对象(它甚至可以很好地定义为通过const更改对象)指针/引用,只要实际对象是非const并且您丢弃了对象的访问路径的常量)。

在实践中,我认为没有编译器可以对各种const对象执行任何重要的优化。但对于原始类型的对象(整数,字符等),我认为编译器可以非常积极地优化这些项的使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值