社区
C语言
帖子详情
关于内联函数调用问题!纯技术问题!欢迎!
onethousand
2003-08-24 02:51:24
我们都知道在主函数中调用子函数的过程,有一些额外开销。
但PRIMER上说,内联函数就没有这方面开销!为什么呢?内联函数的调用机制是怎样的呢?
...全文
121
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
打赏
举报
回复
内联函数就相当与把代码直接嵌入在代码里面,没有去调用函数所需的开销
以空间换时间
内联函数
详解!!!
以inline修饰的函数叫做
内联函数
,编译时C++编译器会在
调用
内联函数
的地方展开,没有函数压栈开销,提高运行效率 为什么要有
内联函数
: 1.
内联函数
在编译时会进行替换,少了函数的压栈开销,提高运行效率 2.宏函数的...
一文搞懂
内联函数
!
二、为什么要使用
内联函数
? 三、哪些函数不能是
内联函数
? 四、使用
内联函数
的缺点 五、总结 内敛函数想必大家都很熟悉,适当的使用内敛函数可以提高程序的执行效率。本篇文章就来讲解下内敛函数,赶紧来看...
普通成员函数和
内联函数
调用
区别(内含函数
调用
过程)
收先要注意的是,即使在代码中声明为
内联函数
,编译器也不一定接受,实现的时候不一定为
内联函数
。 普通函数
调用
:执行到
调用
语句时,跳到函数代码存储区,然后执行局部变量压栈、参数压栈存、保护现场(存储函数...
内联函数
提高函数
调用
效率
存在函数频繁
调用
时,
内联函数
通过牺牲空间换取时间的节省。
内联函数
和普通函数的区别
1.
内联函数
和普通函数的参数传递机制相同,但是编译器会在每处
调用
内联函数
的地方将
内联函数
内容展开,这样既避免了函数
调用
的开销又没有宏机制的缺陷 2. 普通函数在被
调用
的时候,系统首先要到函数的入口地址去...
C语言
69,335
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章