内联函数 与 宏
目的:完全处于性能的考虑
机制:将被调用函数的函数代码直接地整个插入到函数被调用处
两种表现:
1. 关于类的成员函数
类外使用时,需要指定关键字inline
类内使用时,声明的同时提供函数体,inline不是必须的
2. 关于普通函数
需要加inline
原则:ODR原则,最好将内联函数都定义在一个头文件
优点:
1. 减少因为函数调用,主要是参数压栈,栈帧开辟与回收,以及寄存器的保存与恢复
2. 编译后, 代码集中,优化更彻底,(对最终代码优化可能更有贡献)
分析:
空间上:非内链函数代码只有一份,使用call指令调用
内联函数每个被调用出都有一份代码拷贝。
如果内联函数自己的函数代码量比自己函数调用的准备与善后引入的代码量小,则内联后代码量将变小
时间上:内联函数调用的代码是相邻的,同一页面或者连续页面,降低缺页率
建议:内联函数最好在开发后期引入,避免大量编译时间
修改/维护:修改内联函数需要重新编译真个工程
特点:inline只是对编译器的一种建议
内联虚函数:由于虚函数是晚绑定的,编译期不知道函数属于哪个版本
可以内联的情况: 1.通过对象
2.指针/引用 编译器确定虚函数具体版本
==================================================
宏: 内联函数:
1.由预处理器处理 1.编译器处理
2.对++/--操作有副作用 2.可能会被编译器拒绝(不一定内联)
3.难于调试 3.可能造成代码膨胀
4.必定被展开
==================================================
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1998958
分享到:
相关推荐
文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #define MAX(a,b) ((a)>(b)?(a):(b)) 该语句使得程序中每个出现MAX(a,b)函数调用的地方都被宏定义中后面的表达式((a)>(b)?...
内联函数(inline function)是 C++ 语言中的一种特殊函数,具有优缺点,今天我们将深入探究内联函数的定义格式、编程风格、优缺点、使用注意事项,以及与宏的区别。 首先,内联函数的定义格式是将关键字 `inline` ...
《预处理宏与内联函数:理解它们的区别与应用》 预处理宏和内联函数在C/C++编程中都是为了提升程序效率而设计的工具,但它们在使用上有着本质的区别。本文将深入探讨这两种技术,帮助开发者更好地理解和利用它们。 ...
5. 阐述内联函数与宏定义的差异,以及为什么内联函数通常比宏更安全。 通过阅读“VC中内联函数的定义和案例共3页.pdf”文档,开发者可以获得深入理解,知道何时何地适当地使用内联函数来优化代码,提高程序性能。...
在实际编程中,应根据具体情况选择使用内联函数还是宏。对于小规模、性能敏感的函数,内联函数通常是个好选择。而宏在某些特定场景下,如定义常量、编写模板元编程等,仍有其独特优势。但是,过度依赖宏可能导致代码...
内联函数的设计目标是替代C语言中的宏定义,克服宏定义的一些弊端,同时保留其效率优势。 在C语言中,宏定义(如`#define ExpressionName(Var1, Var2) ((Var1)+(Var2))*((Var1)-(Var2))`)通过预处理器进行文本替换...
内联函数和宏定义在C语言中都是用来优化程序性能的工具,但它们在使用上有着本质的区别。内联函数提供了更加安全和可调试的代码替代宏定义,尤其是在需要兼顾性能和代码可读性的场景下。 内联函数是C++引入的概念,...
宏定义和内联函数都可以用来提高代码的执行效率,但它们在实现方式和使用场景上有所不同。宏定义在预处理阶段进行文本替换,不进行类型检查,而内联函数在编译时进行类型检查。宏定义适用于简单的代码替换,而内联...
在C++编程语言中,内联函数的引入主要与宏函数的缺陷有关。宏函数是C++中的一个预处理器特性,允许程序员定义可替换的文本片段。然而,宏函数在某些情况下存在一些固有问题,这使得C++引入了内联函数作为更安全、更...
### C++中的宏、内联函数和宏的比较 ...综上所述,宏和内联函数各有优势与局限性,在选择使用时需根据具体需求和上下文环境进行权衡。对于现代C++编程而言,推荐优先考虑使用内联函数,除非宏能提供显著的优势。
内联函数的执行过程与带参数宏定义很相似,但参数的处理不同。带参数的宏定义并不对参数进行运算,而是直接替换;内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算...
与宏相比,内联函数有以下优点: 1. **类型安全**:内联函数是真正的函数,遵循C++的类型系统,可以防止类型转换错误。 2. **作用域限制**:内联函数不会导致全局名字空间的污染,而宏定义的是全局的。 3. **访问...
压缩包中的文件列表看似与宏和内联函数主题无关,但它们可能代表一个C语言项目的一部分。例如,`keilkilll.bat`可能是一个用于编译项目的批处理脚本,`lib`和`core`可能包含库文件,`doc`可能存放文档,`output`可能...
1.2 内联函数与宏定义的区别 与宏定义相比,内联函数在很多方面具有优势: - 内联函数是编译器在编译时处理的,而宏是在预处理阶段进行文本替换。 - 内联函数遵循类型检查和作用域规则,确保了安全性和正确性,而宏...
**内联函数与宏的区别** 1. 内联函数在运行时可调试,而宏定义在编译时展开,无法进行调试。 2. 编译器对内联函数的参数进行类型安全检查,而宏定义不进行这种检查。 3. 内联函数可以访问类的私有和保护成员,宏定义...
内联函数与普通函数的区别 内联函数和普通函数是两种不同的函数类型,它们在定义、调用和执行效率方面有着明显的差异。今天,我们将深入探讨这两种函数类型的区别。 首先,让我们来说说普通函数。普通函数是一种...
本文记录了嵌入式C语言学习过程中的一些零散知识,包括ARM汇编指令集、string.h库函数、GNU拓展语法、内联函数与宏、预定义宏、#pragma等。 1. ARM汇编指令集 ARM汇编指令集是ARM处理器的汇编语言,它提供了丰富的...
MATLAB中的内联函数借鉴了C语言中的内联函数,在C语言中,内联函数是通过编译器控制来实现的,它只在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的时间和空间开销。在MATLAB中也...