﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-wifecooky-随笔分类-VC++</title><link>http://www.cppblog.com/wifecooky/category/13591.html</link><description>学一点，记一点</description><language>zh-cn</language><lastBuildDate>Fri, 18 Jun 2010 13:15:14 GMT</lastBuildDate><pubDate>Fri, 18 Jun 2010 13:15:14 GMT</pubDate><ttl>60</ttl><item><title>VC中加入bookmark及显示行号</title><link>http://www.cppblog.com/wifecooky/archive/2010/06/18/118169.html</link><dc:creator>楚天清秋</dc:creator><author>楚天清秋</author><pubDate>Fri, 18 Jun 2010 05:19:00 GMT</pubDate><guid>http://www.cppblog.com/wifecooky/archive/2010/06/18/118169.html</guid><wfw:comment>http://www.cppblog.com/wifecooky/comments/118169.html</wfw:comment><comments>http://www.cppblog.com/wifecooky/archive/2010/06/18/118169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wifecooky/comments/commentRss/118169.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wifecooky/services/trackbacks/118169.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/wifecooky/archive/2010/06/18/118169.html'>阅读全文</a><img src ="http://www.cppblog.com/wifecooky/aggbug/118169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wifecooky/" target="_blank">楚天清秋</a> 2010-06-18 13:19 <a href="http://www.cppblog.com/wifecooky/archive/2010/06/18/118169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>添加以下语句可以让你轻松定位到内存泄漏的地方</title><link>http://www.cppblog.com/wifecooky/archive/2010/04/20/113078.html</link><dc:creator>楚天清秋</dc:creator><author>楚天清秋</author><pubDate>Tue, 20 Apr 2010 07:58:00 GMT</pubDate><guid>http://www.cppblog.com/wifecooky/archive/2010/04/20/113078.html</guid><wfw:comment>http://www.cppblog.com/wifecooky/comments/113078.html</wfw:comment><comments>http://www.cppblog.com/wifecooky/archive/2010/04/20/113078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wifecooky/comments/commentRss/113078.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wifecooky/services/trackbacks/113078.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#ifdef&nbsp;_DEBUG<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;new&nbsp;DEBUG_NEW</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#undef</span><span style="COLOR: #000000">&nbsp;THIS_FILE</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;THIS_FILE[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;__FILE__;<br></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#endif</span></div>
<p>对于这段代码的作用，通常有一下解释：</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个是为了VC检测内存泄露而定义的, 只在 Debug 版本中; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 曾经一个解释说，多次使用__FILE__宏，虽然得到字符串的内容相同，但是可能地址不同，即同一个字符串常量多次用到时占用不同的地址，这样导致需要的内存增加了。为了检测内在泄露, Debug 版本的 new 附加上了调用 new 的文件名与调用所在的行号信息, 这是通过 __FILE__ 和 __LINE__ 来实现的, 这两个属于预定义的内部宏, 而之所以要用 THIS_FILE 来代替 __FILE__, 是为了减少程序大小: 如果你在一个文件中有 10000 次对 new 的调用, 那么会生成 10000 个当前文件名的常量字符串(第一个都是由 __FILE__ 宏扩展而来的), 最后生成的目标文件会很大, 而用 THIS_FILE 来代替, 当前文件名只有一份, 传递文件名使用 THIS_FILE 指针就可以了。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __FILE__和__LINE__一样都是编译器定义的宏。当碰到__FILE__时，编译器会把__FILE__替换成一个字符串，这个字符串就是当前在编译的文件的路径名。在DEBUG_NEW的定义中没有直接使用__FILE__，而是用了THIS_FILE，其目的是为了减小目标文件的大小。假设在某个cpp文件中有100处使用了new，如果直接使用__FILE__，那编译器会产生100个常量字符串，这100个字符串都是这个cpp文件的路径名，显然十分冗余。如果使用THIS_FILE，编译器只会产生一个常量字符串，那100处new的调用使用的都是指向常量字符串的指针。&nbsp;&nbsp;&nbsp;&nbsp; <br>在&nbsp;&nbsp; MFC&nbsp;&nbsp; 中，可以使用&nbsp;&nbsp; DEBUG_NEW&nbsp;&nbsp; 宏代替&nbsp;&nbsp; new&nbsp;&nbsp; 运算符来帮助定位内存泄漏。在程序的&#8220;Debug&#8221;版本中，DEBUG_NEW&nbsp;&nbsp; 将为所分配的每个对象跟踪文件名和行号。当编译程序的&#8220;Release&#8221;版本时，DEBUG_NEW&nbsp;&nbsp; 将解析为不包含文件名和行号信息的简单&nbsp;&nbsp; new&nbsp;&nbsp; 操作。因此，在程序的&#8220;Release&#8221;版本中不会造成任何速度损失。&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp; 如果不想重写整个程序来使用&nbsp;&nbsp; DEBUG_NEW&nbsp;&nbsp; 代替&nbsp;&nbsp; new，则可以在源文件中定义下面的宏：&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp; #define&nbsp;&nbsp; new&nbsp;&nbsp; DEBUG_NEW&nbsp;&nbsp; <br>&nbsp; 当进行对象转储时，用&nbsp;&nbsp; DEBUG_NEW&nbsp;&nbsp; 分配的每个对象均将显示被分配到的文件和行号，使您可以查明内存泄漏源。&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp; MFC&nbsp;&nbsp; 框架的&#8220;Debug&#8221;版本自动使用&nbsp;&nbsp; DEBUG_NEW，但代码不自动使用它。如果希望利用&nbsp;&nbsp; DEBUG_NEW&nbsp;&nbsp; 的好处，则必须显式使用&nbsp;&nbsp; DEBUG_NEW&nbsp;&nbsp; 或&nbsp;&nbsp; #define&nbsp;&nbsp; new，如上所示。&nbsp;&nbsp; <br>总起来讲，这段代码的作用就是防止内存泄露，减小程序编译开销的。</p>
<p><br>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/Ronger0828/archive/2009/01/11/3750962.aspx">http://blog.csdn.net/Ronger0828/archive/2009/01/11/3750962.aspx</a></p>
<img src ="http://www.cppblog.com/wifecooky/aggbug/113078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wifecooky/" target="_blank">楚天清秋</a> 2010-04-20 15:58 <a href="http://www.cppblog.com/wifecooky/archive/2010/04/20/113078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>