关于C++Release后的优化感想

最近学了点汇编,虽然写不出什么代码,但是好歹看懂一点了。于是突然想去看看C++对代码优化到什么程度。

首先看debug,debug是完全没有什么优化了,除此之外还加了很多检测的过程,难怪效率那么低。

后来看Release,优化得很彻底,用不到的变量,全部去掉比如 int a=0;a++;

不管你对a进行了什么操作,你最终没有真正使用它,那么就会除掉,这个大概不算什么,是个人都知道的道理。

比较令我惊讶的是对函数的优化。如果调用库函数,那就是只能老老实实call了,但是调用自己定义的函数,几乎都是自己内联展开。之前看到说使用inline才会展开的说法根本站不住脚,或者说简单的语句才会展开,不过什么的简单的语句其实很难说,至少别人说的有循环就不会内联是完全不对了,C++一样给展开掉。即使函数声明和实现不在同一个文件,还是会被展开。我还没尝试怎么样的情况才不会被展开,感觉大部分情况都会被展开吧,需要多研究。

另外还有一种情况就是类似

for(int i=0;i<10;i++)a++;这样的语句,很明显,如果你去优化,肯定直接就是a+=10;实际上编译器也是这么优化的。

看来C++之所以快,很大程度是编译器避开了我们的愚蠢,不过从这个角度来说,我之前所做的很多看似优化的优化,其实都没多少用处,还不如按顺手的方式来写。

不知道除了C++,其他语言类似C#、Java有没有这样的机制,感觉就算有可能也没那么彻底吧,毕竟那些语言还有错误检查,减少了Crash的概率,省去了编译的时间,代价就是性能上的损失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值