反汇编之C++的内联
发布日期:2021-05-26 20:04:54 浏览次数:14 分类:技术文章

本文共 834 字,大约阅读时间需要 2 分钟。

 

C/C++提供了内联函数机制

内联函数就是向编译器建议:编译这个函数的时候.直接把函数展开,而不是进行函数调用call.当然编译器并不接受这个建议.仍然把他当做普通函数进行编译

使用内联函数的优点:减少函数调用的操作.也就是免去了保存堆栈现场,返回地址,参数进栈.分配栈空间,跳转.回收栈空间.恢复堆栈现场,虽然使用宏函数可以实现其效果.但是宏函数不能在编译阶段提供类型检查,为bug留下隐患,内联函数在编译时一定会进行类型检查

内联函数的缺点:造成代码膨胀.把一个复杂.函数体较大.多出调用的函数使用内联函数实现.是一个错误的决定.

 
  1. int add_not_inline(int a, int b)
  2. {
  3. return a + b;
  4. }
  5.  
  6. inline int add_inline(int a, int b)
  7. {
  8. return a + b;
  9. }
  10.  
  11. int main()
  12. {
  13. int a, b;
  14. //a, b的初始化操作省略
  15. int c, d;
  16. c = add_not_inline(a, b);
  17. d = add_inline(a, b);
  18.  
  19. return 0;
  20. }
 
  1. c = add_not_inline(a, b);
  2. 00DD17DC mov eax,dword ptr [b]
  3. 00DD17DF push eax
  4. 00DD17E0 mov ecx,dword ptr [a]
  5. 00DD17E3 push ecx
  6. 00DD17E4 call add_not_inline (0DD1311h)
  7. 00DD17E9 add esp,8
  8. 00DD17EC mov dword ptr [c],eax 
  9. d = add_inline(a,b);
  10.     mov edx,dword ptr [a]
  11.     mov edx,dword ptr [b]
  12.     mov dword ptr [d],edx
  13.  

从汇编的角度可以看出来.当内联函数被编译器接纳时.直接展开.没有压栈.call.之类的指令

转自

转载地址:https://blog.csdn.net/Gaodes/article/details/81701907 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:反汇编之C++的const
下一篇:反汇编之C++的指针与引用

发表评论

最新留言

不错!
[***.144.177.141]2024年04月17日 08时03分47秒