⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 effective c++ 2e item33.htm

📁 Effective-c++.国外很经典的一本关于c++编程的电子书。
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0047)http://www.csdn.net/develop/article/9/9192.shtm -->
<HTML><HEAD><TITLE>Effective C++ 2e Item33</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content=0 http-equiv=Expires><LINK 
href="Effective C++ 2e Item33.files/news.css" rel=stylesheet>
<STYLE type=text/css>.fst {
	BACKGROUND: #eeeecc; BORDER-LEFT: #000000 1px solid; BORDER-RIGHT: #000000 1px solid; PADDING-BOTTOM: 0px; PADDING-LEFT: 15px; PADDING-RIGHT: 15px; PADDING-TOP: 0px; WIDTH: 770px
}
.fstdiv3 IMG {
	BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-RIGHT: #eeeecc 8px solid; BORDER-TOP: #eeeecc 6px solid
}
</STYLE>

<META content="MSHTML 5.00.2614.3500" name=GENERATOR></HEAD>
<BODY aLink=#990000 bgColor=#ffffff bottomMargin=0 leftMargin=0 rightMargin=0 
topMargin=0 marginheight="0" marginwidth="0">
<SCRIPT language=javascript1.2>
<!--
	var currentpos,timer; 
	function initialize() 
	{ 
	timer=setInterval('scrollwindow()',10);
	} 
	function sc(){
	clearInterval(timer);	
	}
	function scrollwindow() 
	{ 
	currentpos=document.body.scrollTop; 
	window.scroll(0,++currentpos); 
	if (currentpos != document.body.scrollTop) 
	sc();
	} 
	document.onmousedown=sc
	document.ondblclick=initialize
//-->
</SCRIPT>

<CENTER><LINK href="news.css" rel=stylesheet>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
  <TBODY>
  <TR vAlign=bottom>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/1.gif" 
      width=14></DIV></TD>
    <TD background="Effective C++ 2e Item33.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/">CSDN主页</A></FONT></DIV></TD>
    <TD bgColor=#001880 height=22 width=185>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/2.gif" 
      width=70></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/y1.gif" 
      width=3></DIV></TD>
    <TD background="Effective C++ 2e Item33.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/news/">新闻聚焦</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item33.files/di.gif" height=22>
      <DIV align=center><FONT color=#ff6633><A 
      href="http://www.csdn.net/cnshare/">共享软件</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=14></DIV></TD>
    <TD background="Effective C++ 2e Item33.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/buy/">俱乐部</A><IMG 
      src="http://www.csdn.net/images/buy.gif"></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item33.files/di.gif" height=22>
      <DIV align=left><A href="http://www.csdn.net/develop/"><FONT 
      color=red>开发文档</FONT></A></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item33.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://expert.csdn.net/">专家门诊</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item33.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/job/">招聘求职</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item33.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/linux/">Linux园地</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item33.files/di.gif" height=22>
      <DIV align=left><A href="http://www.csdn.net/magazine/">程序员杂志</A></DIV></TD>
    <TD height=22 width=11>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/j1.gif" 
      width=11></DIV></TD></TR></TBODY></TABLE>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
  <TBODY>
  <TR>
    <TD bgColor=#001880 height=5 width=2></TD>
    <TD height=5 width=768></TD></TR></TBODY></TABLE>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
  <TBODY>
  <TR>
    <TD bgColor=#001880 width=2></TD>
    <TD width=158><IMG border=0 
    src="http://www.csdn.net/images/csdn_logo.gif"></TD>
    <TD align=middle width=470>
      <OBJECT classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 
      codeBase=http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0 
      height=60 id=Movie1 width=468><PARAM NAME="movie" VALUE="http://www.csdn.net/images/ad/magazine6_1.swf"><PARAM NAME="quality" VALUE="high">
      <EMBED src='http://www.csdn.net/images/ad/magazine6_1.swf' quality=high 
      WIDTH=468 HEIGHT=60 TYPE='application/x-shockwave-flash' 
      PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'>
      </EMBED></OBJECT><IMG border=0 height=0 
      src="http://www.csdn.net/count/pageview.asp?name=cnshare" width=0> </TD>
    <TD align=right width=140>
      <SCRIPT>document.write("<img src=http://www.csdn.net/count/pageview.asp?name=develop border=0 width=0 height=0>");</SCRIPT>
      <A href="http://www.csdn.net/dev/"><IMG border=0 height=60 
      src="http://www.csdn.net/develop/images/kfzxt3.gif" width=120></A> 
  </TD></TR></TBODY></TABLE>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
  <TBODY>
  <TR>
    <TD bgColor=#001880 width=2></TD>
    <FORM action=http://www.csdn.net/member/logon.asp method=post target=_blank>
    <TD bgColor=#e0dedf vAlign=bottom width=340> 昵称:<INPUT class=from1 
      name=name size=10> 密码:<INPUT class=from1 name=pass size=10 
      type=password> <SELECT name=type size=1> <OPTION value=1>我的论坛</OPTION> 
        <OPTION value=2>我的软件</OPTION> <OPTION value=3>我的订单</OPTION> <OPTION 
        selected value=4>我的文档</OPTION> <OPTION value=5>我的简历</OPTION></SELECT></TD>
    <TD bgColor=#e0dedf vAlign=bottom width=45><INPUT height=17 
      src="http://www.csdn.net/images/denglu.gif" type=image width=44> </TD>
    <TD bgColor=#e0dedf vAlign=bottom width=45><A 
      href="http://www.csdn.net/expert/zc.asp" target=_parent><IMG border=0 
      src="http://www.csdn.net/images/zhuce.gif"></A> </TD></FORM>
    <FORM action=http://www.csdn.net/find.asp method=post target=_blank>
    <TD align=right bgColor=#e0dedf vAlign=bottom width=293><INPUT class=from1 
      name=search> <SELECT name=type size=1> <OPTION value=1>新闻</OPTION> 
        <OPTION value=2>软件</OPTION> <OPTION value=3>商品</OPTION> <OPTION selected 
        value=4>文档</OPTION> <OPTION value=5>论坛</OPTION></SELECT></TD>
    <TD bgColor=#e0dedf vAlign=bottom width=45><INPUT height=17 
      src="http://www.csdn.net/images/sousuo.gif" type=image width=44> 
  </TD></FORM></TR></TBODY></TABLE>
<TABLE align=center bgColor=#cccc99 border=0 cellPadding=2 cellSpacing=0 
width=770>
  <TBODY>
  <TR>
    <TH align=left>Effective C++ 2e Item33 &nbsp;&nbsp;&nbsp; 
  </TH></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#eeeecc border=1 cellPadding=1 cellSpacing=0 
width=770>
  <TBODY>
  <TR>
    <TD align=left width=300><B>关键字:</B><BR>Effective C++ </TD>
    <TD align=middle width=120><B>贴文时间</B><BR>2001-7-25 20:26:22 </TD>
    <TD align=middle width=80><B>文章类型: </B><BR>翻译 </TD>
    <TD align=middle width=100><B>给贴子投票 </B><BR><A 
      href="http://www.csdn.net/develop/addscore.asp?id=9192">投票</A> </TD></TR>
  <TR>
    <TD>&nbsp; lostmouse &nbsp;&nbsp; 翻译 </TD>
    <TD colSpan=3 vAlign=top><B>出处: </B><A 
      href="http://www.csdn.net/develop/article/9/Effective%20C++%202e%20e-book">Effective 
      C++ 2e e-book </A></TD></TR>
  <TR>
    <TD bgColor=#cccc99 colSpan=5>&nbsp;</TD></TR></TD></TR></TBODY></TABLE>
<DIV align=center>
<DIV align=left class=fst>
<DIV class=fstdiv3 id=print2><BR><BR>
<P>条款33: 明智地使用内联</P>
<P>内联函数------多妙的主意啊!它们看起来象函数,运作起来象函数,比宏(macro)要好得多(参见条款1),使用时还不需要承担函数调用的开销。你还能对它们要求更多吗?</P>
<P>然而,你从它们得到的确实比你想象的要多,因为避免函数调用的开销仅仅是问题的一个方面。为了处理那些没有函数调用的代码,编译器优化程序本身进行了专门的设计。所以当内联一个函数时,编译器可以对函数体执行特定环境下的优化工作。这样的优化对"正常"的函数调用是不可能的。</P>
<P>我们还是不要扯得太远。程序世界和现实生活一样,从来就没有免费的午餐,内联函数也不例外。内联函数的基本思想在于将每个函数调用以它的代码体来替换。用不着统计专家出面就可以看出,这种做法很可能会增加整个目标代码的体积。在一台内存有限的计算机里,过分地使用内联所产生的程序会因为有太大的体积而导致可用空间不够。即使可以使用虚拟内存,内联造成的代码膨胀也可能会导致不合理的页面调度行为(系统颠簸),这将使你的程序运行慢得象在爬。(当然,它也为磁盘控制器提供了一个极好的锻炼方式:))过多的内联还会降低指令高速缓存的命中率,从而使取指令的速度降低,因为从主存取指令当然比从缓存要慢。</P>
<P>另一方面,如果内联函数体非常短,编译器为这个函数体生成的代码就会真的比为函数调用生成的代码要小许多。如果是这种情况,内联这个函数将会确实带来更小的目标代码和更高的缓存命中率!</P>
<P>要牢记在心的一条是,inline指令就象register,它只是对编译器的一种提示,而不是命令。也就是说,只要编译器愿意,它就可以随意地忽略掉你的指令,事实上编译器常常会这么做。例如,大多数编译器拒绝内联"复杂"的函数(例如,包含循环和递归的函数);还有,即使是最简单的虚函数调用,编译器的内联处理程序对它也爱莫能助。(这一点也不奇怪。virtual的意思是"等到运行时再决定调用哪个函数",inline的意思是"在编译期间将调用之处用被调函数来代替",如果编译器甚至还不知道哪个函数将被调用,当然就不能责怪它拒绝生成内联调用了)。以上可以归结为:一个给定的内联函数是否真的被内联取决于所用的编译器的具体实现。幸运的是,大多数编译器都可以设置诊断级,当声明为内联的函数实际上没有被内联时,编译器就会为你发出警告信息(参见条款48)。</P>
<P>假设写了某个函数f并声明为inline,如果出于什么原因,编译器决定不对它内联,那将会发生些什么呢?最明显的一个回答是将f作为一个非内联函数来处理:为f生成代码时就象它是一个普通的"外联"函数一样, 
对f的调用也象对普通函数调用那样进行。</P>
<P>理论上来说确实应该这样发生,但理论和现实往往会偏离,现在就属于这种情况。因为,这个方案对解决"被外联的内联"(outlined 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -