CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

请问,什么是内联函数啊?

楼主vrace_zh()2006-05-04 17:49:24 在 C/C++ / C++ 语言 提问

不时说内联函数就是在调用的时候,编译器把函数的代码直接替换掉函数的调用么?这样就不会用压栈,call等操作了。  
  但是我在用visual   studio2003调试的时候察看反汇编代码,还是同样有压棧,call等操作。  
   
  我的原代码是:  
  1、函数声明定义://下面是非内联的时候,第二种情况在void前加上inline,这里就不多写了  
  void   func(int   a,   int   b)  
  {  
          cout   <<   a   <<   b;  
  }  
   
  2、调用时候:  
  int   a   =   1,   b   =   2;  
  func(a,   b);  
   
  --------------------  
  如下为两种情况的反汇编代码,问题是:他们怎么是一样的呢?哪里看出用代码替换了调用的呢??  
   
  //一般情况  
          12:   int   a   =   1,   b   =   2;  
  0041B1DE     mov                   dword   ptr   [a],1    
  0041B1E5     mov                   dword   ptr   [b],2    
          13:   fun(a,   b);  
  0041B1EC     mov                   eax,dword   ptr   [b]    
  0041B1EF     push                 eax      
  0041B1F0     mov                   ecx,dword   ptr   [a]    
  0041B1F3     push                 ecx      
  0041B1F4     call                 fun   (41A0B8h)    
  0041B1F9     add                   esp,8  
     
  //内联情况  
          12:   int   a   =   1,   b   =   2;  
  0041B18E     mov                   dword   ptr   [a],1    
  0041B195     mov                   dword   ptr   [b],2    
          13:   fun(a,   b);  
  0041B19C     mov                   eax,dword   ptr   [b]    
  0041B19F     push                 eax      
  0041B1A0     mov                   ecx,dword   ptr   [a]    
  0041B1A3     push                 ecx      
  0041B1A4     call                 fun   (41933Eh)    
  0041B1A9     add                   esp,8    
   
  谢谢大家,我新手! 问题点数:20、回复次数:10Top

1 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2006-05-04 17:56:07 得分 0

给函数前面加inline只是向编译器"推荐"这个函数最好是内联函数,但是最终的决定权还是在编译器那里,编译器会根据自己的规则来决定是否把这个函数当作内联函数处理。Top

2 楼Kshape(C/C++初学者~~~~)回复于 2006-05-04 18:48:36 得分 0

楼上的,  
  void   func(int   a,   int   b)  
  {  
          cout   <<   a   <<   b;  
  }  
  如此简单的语句,一般的编译器都会判断正确的吧:也就是,当成内联来处理。Top

3 楼longituder(大G)回复于 2006-05-04 19:01:51 得分 0

内联在debug和普通函数是一样,只有在release才展开,所以它是可调试的Top

4 楼MagicCarmack(MagiC++)回复于 2006-05-04 19:03:21 得分 0

内联只是一种申请,而不是一种保障Top

5 楼kingoffighting()回复于 2006-05-04 20:45:16 得分 0

没事别内联,咱不希罕那点速度.何况以空间为代价.   用内联函数来写库.LIB   .DLL文件是兵家之大忌.Top

6 楼qhgary(Gary)回复于 2006-05-05 01:15:18 得分 0

请问楼上,为什么说“用内联函数来写库.LIB   .DLL文件是兵家之大忌.”Top

7 楼pgmsoul(游侠)回复于 2006-05-05 11:17:05 得分 0

内联在debug和普通函数是一样,只有在release才展开,所以它是可调试的  
  这个可以设置一下.在高度优化下,如果再添上模板,反汇编就什么也看不明白了.  
  推荐用内联函数,咱不希罕那点空间,何况以速度为代价.  
  不过很多知名软件,什么都不希罕,又大又慢.  
  Top

8 楼pgmsoul(游侠)回复于 2006-05-05 11:19:55 得分 0

有些内联函数的体积,比不内联要小.大多如此.Top

9 楼delphihero(何去何从)回复于 2006-05-05 11:58:22 得分 0

内联函数在   release   版才展开,或者在debug里调成最大速度优化Top

10 楼nanhu_007(物是人非)回复于 2006-05-05 13:30:49 得分 0

inline函数会使lib的代码迅速膨胀,所以还是少用为妙!Top

相关问题

关键词

得分解答快速导航

  • 帖主:vrace_zh

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo