社区
C语言
帖子详情
关于内联函数调用问题!纯技术问题!欢迎!
onethousand
2003-08-24 02:51:24
我们都知道在主函数中调用子函数的过程,有一些额外开销。
但PRIMER上说,内联函数就没有这方面开销!为什么呢?内联函数的调用机制是怎样的呢?
...全文
199
14
打赏
收藏
关于内联函数调用问题!纯技术问题!欢迎!
我们都知道在主函数中调用子函数的过程,有一些额外开销。 但PRIMER上说,内联函数就没有这方面开销!为什么呢?内联函数的调用机制是怎样的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luxinder
2003-08-25
打赏
举报
回复
在函数调用时候要进行参数的赋值和上下文的切换都可能影响到程序所需的内存和
性能,
如double tax(double gross)
{ return gross*0.05;}
当客户代码调用此函数是,客户函数的上下文(即客户函数的参数和包括局部数组
在内的变量)将会保存到栈中。函数调用结束在恢复。
而一个函数成为内联后,则对该函数的调用都被替换称函数中定义的各个语句。没
调用的开销,也不使用栈了。但其可能增加可执行程序的大小,因此可能导致额外的
交换从而降低执行速度
onethousand
2003-08-25
打赏
举报
回复
各位,是不是这样呢
就象我上面说的,执行子函数时与执行内联一样都要暂停主函数的执行,但是执行子函数前要
保存当前状态,返回地址,实参,然后清除原有状态(内存中)来执行子函数;而执行内联时,就没有上面操作呢
airtraffic
2003-08-24
打赏
举报
回复
内联函数就是程序流程执行到此函数的时候,不挂起,而直接在内联函数处展开:
inline int min(int a, int b)
{
return a < b ? a : b ;
}
那么在函数中调用到min()函数的时候,
int main()
{
//....
//int i
i = min(a, b);
//......
}
就在min()函数处直接展开为:
i = a < b ? a : b ;
这样就少了拷贝形参,调用函数的开销,但是内联函数只是适用那些比较短的函数!
讨论!
Beover1984
2003-08-24
打赏
举报
回复
内联是在编译阶段用源程序替代调用,但内联是一种请求,不是一种保证,也就是说不没个inline函数会被真的内联,这要看编译器了。
onethousand
2003-08-24
打赏
举报
回复
除了汇编不大懂外,大家说的我都懂了;
主要是我还没弄懂 主函数是按流程执行的,到子函数时,把主函数放在一边,执行子函数;
但执行到内联时,内联也和主函数无关,就是说把主函数流程断了,相当于放在一边,后执行内联啊!
就是这我觉得没区别啊
loveghb
2003-08-24
打赏
举报
回复
内联就是把一部分要经常用到的小功能写成一个函数,和普通的函数相比,它无需寄存器的保护,参数的出、入栈。所以能提高速度。相当于宏,但是有类型检查,更安全。但是在扩展过程中如果遇到过多的可以省去的中间变量的话,特别是类的变量,就会变的特别大。
具体的还是自己看看《INSIDE THE C++ OBJECT MODEL》吧。
或者自己看看反汇编的代码吧。
tonybaobao
2003-08-24
打赏
举报
回复
我想应该是在函数被反复调用才会比较明显感觉到吧!内联函数就地展开,就像宏一样,所以快?
davidwoo
2003-08-24
打赏
举报
回复
内联函数是要编译器,将函数体
直接插到调用处.而不用在内存中
创建堆栈,因此节省了资源.
madmars
2003-08-24
打赏
举报
回复
如果学习了汇编,你会对这方面的东西很了解
运行一个函数的话会执行指令的条转,cpu寄存器的内容会被修改,代码段指针会被修改
然后需要一些实参的压入堆栈的操作,最后函数执行完毕,要进行指令条转返回
另外如果你学习了微机原理你就会知道为了调用函数,也就是指令条转还会重置cpu的指令
队列,这样也将影响效率
,但是如果用inline 这个函数就会被像宏一样展开,只不过比宏多了的类型安全测试
这样的话就没有了额外的函数调用开销
vcforever
2003-08-24
打赏
举报
回复
在程序调用内联函数的时候,
只是将内联函数中的代码简单
的复制到调用处,以提高效率!
定义内联函数时注意,内联函数的函数体一定要小,
不要在内联函数中写过多的代码!
ehhl
2003-08-24
打赏
举报
回复
恩,内联函数就相当与把代码直接嵌入在代码里面,没有去调用函数所需的开销
也就是说,和C里的宏差不多,在调用的时候只是把宏(内联函数)去代替,因此没有
函数调用的开销。但是过多的内联会使程序过分臃肿,因此一般只把那些很小的函数做成
内联函数。
ehhl
2003-08-24
打赏
举报
回复
恩,内联函数就相当与把代码直接嵌入在代码里面,没有去调用函数所需的开销
也就是说,和C里的宏差不多,在调用的时候只是把宏(内联函数)去代替,因此没有
函数调用的开销。但是过多的内联会使程序过分臃肿,因此一般只把那些很小的函数做成
内联函数。
wbh0360
2003-08-24
打赏
举报
回复
调用函数有参数压栈等巨大开销,记不太清楚了。
dddd8888
2003-08-24
打赏
举报
回复
内联函数就相当与把代码直接嵌入在代码里面,没有去调用函数所需的开销
以空间换时间
一文搞懂
内联函数
!
???? 作者:Linux猿 ???? 简介:CSDN博客专家????,C/C++、面试、刷题、算法尽管咨询我,关注我,有
问题
私聊! ???? 关注专栏:C/C++面试通关集锦(优质好文持续更新中……)???? 目录 一、什么是内敛函数? 二、为什么要使用
内联函数
? 三、哪些函数不能是
内联函数
? 四、使用
内联函数
的缺点 五、总结 内敛函数想必大家都很熟悉,适当的使用内敛函数可以提高程序的执行效率。本篇文章就来讲解下内敛函数,赶紧来看下吧! 一、什么是内敛函数? 内敛函数是在 C++
【C/C++】inline
内联函数
详解
内联函数
在C++中是一种特殊的函数,
内联函数
的代码在编译时会在
调用
的位置展开,而不是在运行时
调用
函数。 这样做可以消除函数
调用
的开销,从而提高程序的执行效率。 相当于define宏替换
内联函数
可以分为: 隐式
内联函数
:类内的函数(虚函数除外)都为隐式
内联函数
显式
内联函数
:在类外使用inline关键字修饰的函数
【C++入门】
内联函数
详解C++中的
内联函数
。
【函数
调用
需要哪些开销,
内联函数
又做了什么?】
这篇文章主要为大家讲解了函数
调用
所需要的开销以及
内联函数
的功能,
内联函数
可以为函数的
调用
节省掉许多的开销,这篇文章涉及到了很多关于函数
调用
的知识,这其中又穿插了很多关于操作系统和计算机组成原理的相关知识,不管是考研还是就业这部分的知识都是非常有用的,希望能够帮助到大家!
【C++】
内联函数
文章内容包括:为什么C++要引入
内联函数
?
内联函数
的概念和
内联函数
的特性等相关内容.
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章