有关C里的宏与C++内联函数的问题 C/C++ / C++ 语言 - CSDN社区 community.csdn.net
2007-12-10 13:33
399 查看
C++ 语言支持函数内联,其目的是为了提高函数的执行效率(速度)。
在C 程序中,可以用宏代码提高执行效率。宏代码本身不是函数,但使用起来象函
数。预处理器用复制宏代码的方式代替函数调用,省去了参数压栈、生成汇编语言的CALL
调用、返回参数、执行return 等过程,从而提高了速度。使用宏代码最大的缺点是容
易出错,预处理器在复制宏代码时常常产生意想不到的边际效应。
让我们看看C++ 的“函数内联”是如何工作的。对于任何内联函数,编译器在符号
表里放入函数的声明(包括名字、参数类型、返回值类型)。如果编译器没有发现内联
函数存在错误,那么该函数的代码也被放入符号表里。在调用一个内联函数时,编译器
首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,当然对所有的函
数都一样)。如果正确,内联函数的代码就会直接替换函数调用,于是省去了函数调用
的开销。这个过程与预处理有显著的不同,因为预处理器不能进行类型安全检查,或者
进行自动类型转换。假如内联函数是成员函数,对象的地址(this)会被放在合适的地
方,这也是预处理器办不到的。
本文转自
http://topic.csdn.net/t/20060312/17/4609465.html
在C 程序中,可以用宏代码提高执行效率。宏代码本身不是函数,但使用起来象函
数。预处理器用复制宏代码的方式代替函数调用,省去了参数压栈、生成汇编语言的CALL
调用、返回参数、执行return 等过程,从而提高了速度。使用宏代码最大的缺点是容
易出错,预处理器在复制宏代码时常常产生意想不到的边际效应。
让我们看看C++ 的“函数内联”是如何工作的。对于任何内联函数,编译器在符号
表里放入函数的声明(包括名字、参数类型、返回值类型)。如果编译器没有发现内联
函数存在错误,那么该函数的代码也被放入符号表里。在调用一个内联函数时,编译器
首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,当然对所有的函
数都一样)。如果正确,内联函数的代码就会直接替换函数调用,于是省去了函数调用
的开销。这个过程与预处理有显著的不同,因为预处理器不能进行类型安全检查,或者
进行自动类型转换。假如内联函数是成员函数,对象的地址(this)会被放在合适的地
方,这也是预处理器办不到的。
本文转自
http://topic.csdn.net/t/20060312/17/4609465.html
相关文章推荐
- 汇编和调用C函数 其他开发语言 / 汇编语言 - CSDN社区 community.csdn.net
- 算术移位与逻辑移位有什么区别? 其他开发语言 / 汇编语言 - CSDN社区 community.csdn.net
- 若用MASM写操作系统的启动部分如何实现? 其他开发语言 / 汇编语言 - CSDN社区 community.csdn.net
- 重大问题:怎样动态维护socket连接! VC-MFC - 基础类 - CSDN社区 community.csdn.net
- 兼容性的问题 移动平台 / Windows Mobile - CSDN社区 community.csdn.net
- 求教:AfxEnableControlContainer(); VC/MFC / 基础类 - CSDN社区 community.csdn.net
- 工作区的RESOURCES提示载入失败? VC/MFC / Visual C++ 资源 - CSDN社区 community.csdn.net
- 在sqlserver中如何对text类型的数据进行replace操作。 MS-SQL Server / 基础类 - CSDN社区 community.csdn.net
- 如何将浮动的DIV位置一直居中?~ Web 开发 / ASP - CSDN社区 community.csdn.net
- 求VC版本如何利用WMI获得磁盘信息 VC/MFC / 进程/线程/DLL - 社区 community.csdn.net
- C++语言基础(7)-inline内联函数
- .NET DLR 上的IronScheme 语言互操作&&IronScheme控制台输入中文的问题
- C++.net 使用ODBC连接SQL SERVER 2005小问题
- asp.net 操作word的问题 http://topic.csdn.net/u/20071028/17/47371eb0-55c4-4286-910f-ce807af2c4a6.html
- 有空到这里看看有关语音处理的文章http://blog.csdn.net/xiufengy/archive/2006/03/24/636646.aspx
- 今天学习asp.net mvc的过程中出现了一点问题,是有关浏览器的,一个疑问?
- C++中字母大小写转换实现的优化 - 程序即人生 - 博客频道 - CSDN.NET
- C++语言特性:构造函数,析构函数,虚函数,内联函数,静态成员函数,重载,覆盖,隐藏
- 转:解决“arcsde服务启动又停止的问题” - shmiloy001的专栏 - 博客频道 - CSDN.NET
- 有关C++字符串KMP匹配问题