zoukankan      html  css  js  c++  java
  • 反汇编->C++内联

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

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

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

    1. int add_not_inline(int a, int b)
    2. {
    3. return a + b;
    4. }
    5. inline int add_inline(int a, int b)
    6. {
    7. return a + b;
    8. }
    9. int main()
    10. {
    11. int a, b;
    12. //a, b的初始化操作省略
    13. int c, d;
    14. c = add_not_inline(a, b);
    15. d = add_inline(a, b);
    16. return 0;
    17. }
    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
    从汇编的角度可以看出来.当内联函数被编译器接纳时.直接展开.没有压栈.call.之类的指令


  • 相关阅读:
    npm 之 --save , -D,--save -dev的区别
    webpack 之 打包(最新版)
    npm 与 yarn 对比
    webpack 之 打包图片文件
    webpack 之 打包less文件
    javascript 之 Event Loop
    package.json中type的含义
    webpack 之 打包css文件操作
    常见问题 之 webpack打包css问题
    类方法和对象方法
  • 原文地址:https://www.cnblogs.com/zengyiwen/p/5679158.html
Copyright © 2011-2022 走看看