条款30:透彻了解inline的里里外外(understand the ins and outs of inlining)

NOTE:

1.将大多数inline限制在小型 被频繁调用的函数身上。这可使日后的调试过程和二进制升级(binary upgradability)更容易,也可使潜在的代码膨胀问题最小化,

使程序的速度提升机会最大化。

2.不要只因为 function templates 出现在头文件,就将他们声明为inline。

时间: 2024-10-21 00:50:08

条款30:透彻了解inline的里里外外(understand the ins and outs of inlining)的相关文章

条款30:透彻了解inline的里里外外。

inline可以带来各种好处: 首先其可以使得消除函数调用带来的开销,再者编译器对这种非函数的代码可以做出更多的优化策略. 但是inline函数首先肯定是会导致程序代码的大小更加的庞大,这样会带来代码膨胀,造成的损害首先就是会导致计算机额外的换页行为,降低指令告诉缓存的集中率,这要就会带来效率上的损失. 所以说,使用inline的关键点就在于,如果inline函数的本体很小的话,那么inline函数展开的代码大小可能比调用非inline函数展开的代码更小,这样就可以提高缓存的击中率,从而提高函数

Effective C++ 条款30 透彻了解inlining的里里外外

1. inline函数既和带参宏一样不带来函数调用的额外开销,又具有和非inline函数相同的功能,也就是说,inline函数同时具备带参宏和非inline函数的优点. 此外,编译器优化机制通常针对于那些不含参数调用的代码,因此inline某个函数就有可能使编译器对它执行语句相关最优化. 2. 虽然inline函数有诸多优点,但由于inline函数对每一次函数调用都用函数本体替换,这无疑加重了编译负担,更重要的是它增加了代码量,此外,由于inline造成的代码膨胀"会导致额外的换页行为(pagi

《Effective C++》学习笔记——条款30

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 五.Implementations Rule 30:Understand the ins and outs of inlining 规则 30:透彻了解inlining的里里外外 1.inline 的优缺点 > 优点 --看起来像函数 --动作像函数 --比宏好

Effective C++:条款30:透彻了解inlining的里里外外

(一) inline函数,可以调用它们而又不需蒙受函数调用所招致的额外开销. inline函数背后的整体观念是,将"对此函数的每一个调用"都已函数本体替换之,这样做可能增加你的目标码(object code)大小.在内存有限的机器上,过度inline会造成程序体积太大,导致换页行为,降低缓存的命中率等一些带来效率损失的行为.如果inline函数的本体很小,编译器针对"函数本体"所产生的码可能比针对"函数调用"所产出的码更小.将函数inline可以

《Effective C++》:条款30:透彻了解inlining的里里外外

inline函数为什么放到头文件 inline函数是特殊的函数,它有宏的优点,却克服了宏的缺点(**条款**2).inline函数可以免除函数调用所招致的额外开销,但你实际获得的好处可能比你想象的还多,编译器会对inline函数本体执行语境相关最优化. 但使用inline函数会导致目标码(object code)变大,因为对inline函数的调用都会以函数本体替换.在内存比较小的机器上,不宜过多使用inline函数.即使使用虚拟内存,也会导致额外的换页行为(paging),降低指令高速缓存装置的

读书笔记 effective c++ Item 30 理解内联的里里外外 (大师入场啦)

最近北京房价蹭蹭猛涨,买了房子的人心花怒放,没买的人心惊肉跳,咬牙切齿,楼主作为北漂无房一族,着实又亚历山大了一把,这些天晚上睡觉总是很难入睡,即使入睡,也是浮梦连篇,即使亚历山大,对C++的热情和追求还是不减,应该是感动了周公吧,梦境从此处开始,大师入场来给我安慰了... 11点躺在床上了,脑子里总结一下最近的工作:最近的开发用到inline函数比较多,众所周知,inline的使用是为了提高程序性能,可结果却总不尽如人意,这个捉急啊,嗯?怎么突然到了山脚下,周边树木林立,郁郁葱葱,鸟儿委婉啼叫

More Effective C++ 条款30 Proxy classes(替身类,代理类)

1. 所谓代理类(proxy class),指的是"它的每一个对象都是为了其他对象而存在的,就像是其他对象的代理人一般".某些情况下用代理类取代某些内置类型可以实现独特的功能,因为可以为代理类定义成员函数而但却无法对内置类型定义操作.条款5就展示了一个使用代理类阻止隐式类型转换的例子. 2. 实现二维数组. C++没有提供分配动态二维数组的语法,因此常常需要定义一些类(模板实现这些功能),像这样: template<class T> class Array2D { publ

Effective C++ 5.实现

//条款26:尽量延后变量的定义式出现的时间 // 1.不仅应该延后变量的定义,更应该直到使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初始值为止.如果这样,不仅能够避免构造和析构的非必要操作,还可以避免毫无意义的调用默认构造函数带来的开销. //条款27:尽量少做转型动作 // 1.尽量以C++风格的转型替代C风格的转型,前者更加安全. // 2.const_cast 通常用来将对象的常量性转除(cast away the constness).它是唯一有此能力的C++-styl

[Effective C++系列]-透彻了解inlining的里里外外

Understand the ins and outs of inlining. [原理] Inline函数背后的做法是将“对函数的每一个调用”都用函数本体替换之.其好处是: 可以消除函数调用所带来的开销. 编译器最优化机制通常被设计用来浓缩那些“不含函数调用”的代码,因此当你inline某个函数,或许编译器有能力对它(函数本体)执行语境相关最优化.大部分编译器不会为一个“outlined函数调用”执行这种最优化动作. 然而inline函数这些美好的一面也伴随着代价:inline函数可能增加程序