为什么书下说内联函数也有函数调用开销?
为什么书上说内联函数也有函数调用开销??这句话出自《3D游戏编程大师技巧》..原话这是一个内联函数,但仍有
为什么书上说内联函数也有函数调用开销??
这句话出自《3D游戏编程大师技巧》..
原话"这是一个内联函数,但仍有函数调用开销".
这个内联函数是这样的:
C/C++ codeinline 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;
如果不是,肯定是没优化好
内联的优势不仅仅在于省了函数调用开销
更重要的是,内联部分与调用函数的其他代码可以一起优化
这个特性可以使寄存器的使用更合理高效
对上面这种常量的处理也是一样的
我还是那句话,内联函数语义上基本等效于普通函数,而优化效果与宏是无区别的
另外一点是,像临时变量及内联的参数这种东西
编译器很轻松地就可以解决掉,在汇编中根本看不到