函数调用的开销:

  函数被调用时,要有函数调用和返回。要保存当前程序上下文信息,以便函数调用完毕后返回原来的地方,继续执行程序。将函数的参数进行压栈、出栈,执行函数,函数调用完毕后释放内部变量占用的内存。

inline作用:

  将函数声明为inline,是对编译器的一种建议,编译器可以选择不进行inline。大多数编译器是在编译过程中进行inline。所以不能对virtual函数进行inline,因为编译的时候编译器不知道该调用哪个函数。编译器也不对通过函数指针进行的调用实施inlining.

  不要轻易的对构造函数和析构函数进行inline,因为即使看着函数体是空的,其实内部编译器会产生一些代码,比如添加默认构造函数,默认拷贝构造函数等等。

  将函数声明为inline,编译器不把它当做是一个函数,而是类似于把函数代码拷贝到原来的地方,这样就省下了函数调用的开销。

  将大多数inlining限制在小型、被频繁调用的函数上。内联函数会在每一处调用函数的地方进行代码复制,会使产生的代码膨胀,对于函数很大来说,这样获得的速度提高会很小甚至没有。所以对于递归,循环等不进行inline。

  inline函数要将声明和定义放在一块,不然没有效果。在类内部的函数定义会自动扩展成inline。在类外部则需显式加上inline声明。

  通常要将inline函数放在头文件内。

  大部分调试器对inline函数束手无策,因为在一个不存在的函数内设立断点并不容易。

函数调用和inline作用的更多相关文章

  1. C++:inline

    inline inline是C++提供的一个关键字,它用于函数定义之前,表示把函数定义为内联函数.内联函数的含义是:在函数调用点把函数体直接展开,取代函数调用. inline int getZero( ...

  2. C语言inline函数(转)

    原文链接:http://blog.csdn.net/yuan1125/article/details/6225993 1  inline只是个编译器建议,编译器不一定非得展开Inline函数. 例如: ...

  3. 14.inline与namespace使用

    #include <iostream> using namespace std; namespace all { //inline作用为默认调用 inline namespace V201 ...

  4. (转载)Autodesk面试技术题解答

    Autodesk面试技术题解答 By SmartPtr(http://www.cppblog.com/SmartPtr/)          近一年以来,AUTODESK的面试题在网上是闹的沸沸扬扬, ...

  5. VC 宏与预处理使用方法总结

    目录(?) C/C++ 预定义宏^ C/C++ 预定义宏用途:诊断与调试输出^ CRT 和 C 标准库中的宏^ NULL 空指针^ limits.h 整数类型常量^ float.h 浮点类型常量^ m ...

  6. OC 面试问题汇总

    OC 问题汇总: 1. 你如何理解 iOS 内存管理   1. new alloc copy retain这些对象我们都要主动的release或者 autorelease   2. 如果是类方法创建的 ...

  7. 5.分析内核中断运行过程,以及中断3大结构体:irq_desc、irq_chip、irqaction

    本节目标:    分析在linux中的中断是如何运行的,以及中断3大结构体:irq_desc.irq_chip.irqaction 在裸板程序中(参考stmdb和ldmia详解): 1.按键按下, 2 ...

  8. 【HTML5】HTML5新布局元素

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. Python四步实现决策树ID3算法,参考机器学习实战

    一.编写计算历史数据的经验熵函数 from math import log def calcShannonEnt(dataSet): numEntries = len(dataSet) labelCo ...

随机推荐

  1. FPGA中的时序分析(四)

    常用约束语句说明 关于Fmax      上述是实现Fmax的计算公式,clock skew delay的计算如下图, 就是两个时钟的差值.到头来,影响Fmax的值的大小就是组合逻辑,而Fmax是针对 ...

  2. python分析log

    最近做的一个项目,系统log下会生成如下的log(部分): [-- ::] Processing File transfer configured from ship to shore.... [-- ...

  3. Compilation failed: this version of PCRE is not compiled with PCRE_UTF8 support at offset 0

    在安装pcre-8.13.tar.gz时候出了错,说是缺少libpcre.so.0 下面是解决方法.真不容易哦,一个问题来没解决,新问题就出来了.一环扣一环,会搞死去.. errorgrep: err ...

  4. 记录网上资源URL

    FQ(使用路由器): http://kennylee26.iteye.com/blog/1887753 http://www.iteye.com/search?type=all&query=s ...

  5. 织梦dedecms简略标题调用标签用法指南

    我们在使用织梦DEDECMS建站过程中,为了使调用的文章标题简短且相对完整(原文标题太长),只好使用了调用简略标题这个方法,使标题显示为简短标题,指向标题时显示完整的标题.并获得文章静态地址链接 下面 ...

  6. SecondaryNamenode配置与NameNode故障恢复

    一.配置 1. 在masters文件中添加 Secondary节点的主机名. *注:masters文件用于指定secondary的主机而不是namenode,slaves用于指定datanode和ta ...

  7. Mybatis多条件查询

    在Mybatis多条件查询中: 1.参数如果是多条件,则需要将将添加到Map集合中进行传入. 2.就是将其参数用有序数字进行代替. Mybatis单个String类型参数传递 mysql文如下,传入参 ...

  8. Android IOS WebRTC 音视频开发总结(三六)-- easyRTC介绍

    本文主要介绍easyRTC,文章来自博客园RTC.Blacker,支持原创,转载请说明出处. 先看看人家官网的介绍,然后再来解释,这样您可能更容易理解: 以下部分内容属个人看法,如有异议,欢迎探讨: ...

  9. PayPal 开发详解(三):在网站上创建【立即付款】按钮

    1.使用[商家帐号]登录https://www.sandbox.paypal.com/ 2.点击[用户信息]->[其他选项]->[我保存的按钮] 3.选择[立即购买按钮事例] 4.[第一步 ...

  10. 新手浅谈Task异步编程和Thread多线程编程

    初学Task的时候上网搜索,看到很多文章的标题都是task取代thread等等相关,我也一直以为task和thread是一类,其实task是.net4.0提出的异步编程,在之前.net1.0有dele ...