对于一个频繁使用的短小函数,应该使用什么来实现?有什么优缺点?
应该使用inline
内联函数,即编译器将inline
内联函数内的代码替换到函数被调用的地方。
优点:
- 在内联函数被调用的地方进行代码展开,省去函数调用的时间,从而提高程序运行效率;
- 相比于宏函数,内联函数在代码展开时,编译器会进行语法安全检查或数据类型转换,使用更加安全;
缺点:
- 代码膨胀,产生更多的开销;
- 如果内联函数内代码块的执行时间比调用时间长得多,那么效率的提升并没有那么大;
- 如果修改内联函数,那么所有调用该函数的代码文件都需要重新编译;
- 内联声明只是建议,是否内联由编译器决定,所以实际并不可控。
评论(1)
inline函数将程序内的一次定义原则变为翻译单元级别的一次定义,可以有效避免栈帧构造与销毁,是否展开又编译器来决定