C++内联函数

宏函数

c语言中有宏函数的概念。宏函数的特点是内嵌到调用代码中去,避免了函数调用的开销。但是由于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语意差错。

举例: #define SQR(i)    ((i)*(i))

int main()

{

int i=4;

SQR(i);          //这种形式是可以的,这样的话,宏函数可以直接替换SQR

SQR(i++);     //不同编译器解释也不同,会发生歧义,不会进行类型检查。

return 0;

}

宏函数优点:代码内嵌,避免函数的调用,会进行类型检查。

缺点:易产生歧义,易使 text 段体积增大(浪费空间,节约时间)


函数

int sqr(int i)

{

return i*i;

}

优点: 一段高度抽象的逻辑,不易产生歧义,使 text 段体积变小。

缺点:函数调用的压栈与出栈的开销。(浪费时间,节约空间)


内联函数(函数和宏函数之间)

兼有了宏函数和函数的很多优点。

语法:

inline int sqr (int x)
{
return x*x;

}

为何所有函数都写成inline?

这由于text段有限,无法包含很多。而且若把很多行的函数作为内联函数,则系统就会跟register一样,进行优化,把内联函数变成普通的函数。换句话说,一个函数不加inline肯定不是内联,但是加了inline 也不一定是。

对其评价

优点:避免调用时的额外开销(入栈与出栈操作)
代价:由于内联函数的函数体在代码段中会出现多个“副本”,因此会增加代码段的空间。
本质:以牺牲代码段空间为代价,提高程序的运行时间的效率。

适用场景:函数体很“小”,且被“频繁”调用。


版权声明:本文为博主原创文章,未经博主允许不得转载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值