edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2446回复:24

\"inline\"的作用是什么呢?

楼主#
更多 发布于:2002-12-06 15:33
如题!
heqingbj
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-06 16:13
内联咯 有点象宏 所有使用内联函数的地方都会使用程序体进行代换
少了函数切换的时间 但耗资源
shownxu
驱动小牛
驱动小牛
  • 注册日期2002-02-05
  • 最后登录2008-04-25
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-06 16:35
还有一点就是inline function可以进行类型匹配的检查, 而define不会
heqingbj
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-06 16:46
还有一点就是inline function可以进行类型匹配的检查, 而define不会


 :D 很多 这就是它不同于宏的关键一点
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-06 17:10
两位仁兄,能不能给我举个例子呀 :D :D :D
在linux里看到好多inline函数,就是不理解,举个简单的例子如何?
wuliao311
驱动小牛
驱动小牛
  • 注册日期2002-11-30
  • 最后登录2014-04-07
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-08 14:42
把它当正常函数看就可以
inline是由编译器来处理的
bbs_000
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2003-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-09 09:14
比如: inline int f(){
    return 0;
}
在编译的时候凡是出现调用f函数的地方,编译后的可执行代码都直接插入到这里,所以提高了运行速度,但占用的空间更大了。
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-09 09:51
那么一般实现什么样功能的函数,才有必要声明为inline呢?
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-09 09:59
提高速度。当然 ,大于3行的就不能内联了。
heqingbj
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-09 10:01
提高速度。当然 ,大于3行的就不能内联了。


大于三行就不能内联了? 这个是为什么阿
偶也不知道 讲讲把:)
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-12-09 10:04
因为达不到提高速度的目的了。
我以前在c++里看到的,现在有些记不清了。但是肯定有行数限制。
heqingbj
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-12-09 10:12
因为达不到提高速度的目的了。
我以前在c++里看到的,现在有些记不清了。但是肯定有行数限制。


恩 好像是这样的 多谢指点
偶现在把好多以前学的东西都还回去咯

bbs_000
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2003-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-12-09 10:24
它也是一把双刃剑,是牺牲空间为代价的。
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-12-09 10:26
[quote]因为达不到提高速度的目的了。
我以前在c++里看到的,现在有些记不清了。但是肯定有行数限制。


恩 好像是这样的 多谢指点
偶现在把好多以前学的东西都还回去咯

 [/quote]
呵呵,我也是。 :)
bbs_000
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2003-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-12-09 11:03
老兄快给分三
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-12-09 13:19
比如: inline int f(){
    return 0;
}
在编译的时候凡是出现调用f函数的地方,编译后的可执行代码都直接插入到这里,所以提高了运行速度,但占用的空间更大了。

你的意思是不是这样的:就是凡是调用f()的地方,其实都用
return 0;这条语句来代替呢?如果是这样,就有点类似模块,我可以这样理解吧?
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-12-09 13:22
老兄快给分三

老兄你就知道要分 :mad: :mad: :mad:
分肯定要给的,不过再等等,非得把这个问题给渣干! :D :D :D
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-12-09 13:58
[quote]比如: inline int f(){
    return 0;
}
在编译的时候凡是出现调用f函数的地方,编译后的可执行代码都直接插入到这里,所以提高了运行速度,但占用的空间更大了。

你的意思是不是这样的:就是凡是调用f()的地方,其实都用
return 0;这条语句来代替呢?如果是这样,就有点类似模块,我可以这样理解吧? [/quote]
right.
heqingbj
驱动小牛
驱动小牛
  • 注册日期2002-10-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-12-09 14:08
[quote][quote]比如: inline int f(){
    return 0;
}
在编译的时候凡是出现调用f函数的地方,编译后的可执行代码都直接插入到这里,所以提高了运行速度,但占用的空间更大了。

你的意思是不是这样的:就是凡是调用f()的地方,其实都用
return 0;这条语句来代替呢?如果是这样,就有点类似模块,我可以这样理解吧? [/quote]
right.
 [/quote]

内核里好像一般内联函数不特意用return的 不过也没有严格的3行限制哦 可以是简单的赋值操作 也可以是一些有些复杂的判断 不过类似模块我同意 一般好像都用于实现某个功能上 :P 好像等于什么都没有说
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-12-09 14:11
内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,内联函数就和普通函数执行效率一样了。

3行是我记忆的数字,不一定准确。
上一页
游客

返回顶部