首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么书下说内联函数也有函数调用开销?

2012-09-10 
为什么书上说内联函数也有函数调用开销??这句话出自《3D游戏编程大师技巧》..原话这是一个内联函数,但仍有

为什么书上说内联函数也有函数调用开销??
这句话出自《3D游戏编程大师技巧》..

原话"这是一个内联函数,但仍有函数调用开销".
这个内联函数是这样的:

C/C++ code
inline void DDraw_memset16(void* pDst, WORD value, UINT count){    _asm     {        mov    edi, pDst        mov    ecx, count        mov    ax,  value        rep    stosw        ; 将ax中的值依次复制到edi指向的内存中,共执行ecx次    }}


什么情况??

[解决办法]
函数调用当然有函数调用的开销,代码区IP指针的跳转的问题,只是没有生成栈区的生成开销等!
[解决办法]
内联在优化上与宏是等效的,甚至是在常量的处理上也是一样的
你说的那个例子a = Test(3, 5);
绝对等效于a = 8;
如果不是,肯定是没优化好

内联的优势不仅仅在于省了函数调用开销
更重要的是,内联部分与调用函数的其他代码可以一起优化
这个特性可以使寄存器的使用更合理高效
对上面这种常量的处理也是一样的

我还是那句话,内联函数语义上基本等效于普通函数,而优化效果与宏是无区别的

另外一点是,像临时变量及内联的参数这种东西
编译器很轻松地就可以解决掉,在汇编中根本看不到

热点排行