标签:
1、去年年底我听见这样一句话“将所有函数内联,执行效率能够更高,函数本不应该存在”,对于一个大学才接触编程,大一看了一年动漫,大二看了一年小说,大三才开始拿起《C++程序设计》(狗都不愿意吃的青春啊),毕业不到一年的小菜鸟我来说,这简直是毁三观的陈述,我认为他的话是错误的,但是说不出充分的原理,编码也是如此,写的代码自己都有一种奇怪的感觉,那么它一定有问题或者存在更为合理优越的实现。
2、内联函数的基本工作原理的将函数调用替换为函数实体,直观上能①减去函数调用的开销,但是这也可能导致代码体积膨胀,所以成为内联函数的要求有函数实体小这一说。(如果函数实体的汇编输出,将比函数调用产生的汇编输出还小,不用考虑了,内联吧)
3、可能是因为上面的原因,我看过很多不管多复杂的类的构造函数、析构函数都是内联的,如果这个类的继承层次有一定深度、组件足够多,那么我们就需要重新考虑了,这种情况是我们要尽量避免的。
4、目前的编译器都会有优化的功能,而且一般的优化都是针对的连续代码进行优化,②内联函数能够使编译器对代码进行更好的优化。(代码优化我相信编译器会比我们一般人做的好很多,所以当我们需要优化自己的代码时,着重点应该在于算法、软件结构等较高层次进行)
5、感觉上2->3->4,证明了1中的那句话,到目前为止内联给我们到来的麻烦仅是代码体积膨胀,编译出来的执行程序中的text段比较大而已,请记住这一点。
6、大家都知道现在计算机的存储结构,这里只考虑高速缓存到内存这一部分,从高到低,每一级的访问时间近似以成千倍甚至更高的增加。
7、为提高高速缓存的利用率,计算机是将其分页分段进行更为有效的管理的。
8、高速缓存的大小是很小的(对于我们运行的程序来说),所以我们的数据不可能都被装载到高速缓存中,这就引出了一个命中率的问题。在不命中的时候,就需要向更为下层的存储结构寻找索取目标数据,宝贵的时间也因此不断大幅增加。
9、回到5,我们因为使用大量内联是text增大,那么相应的能够存活在高速缓存的内容比例也就相对的减小,命中率因此降低,因为存储结构的问题,我们过度的使用内联得到了相反的结果。
10、干啥都要有个度,越过这个度以后,我们往往会适得其反。
标签:
原文地址:http://www.cnblogs.com/haihuahuang/p/4507645.html