• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-22  評論-7  文章-0  trackbacks-0
            1#ifdef _DEBUG
            2#define new DEBUG_NEW
            3#undef THIS_FILE
            4static char THIS_FILE[] = __FILE__;
            5#endif

            對于這段代碼的作用,通常有一下解釋:

             

                    這個是為了VC檢測內存泄露而定義的, 只在 Debug 版本中;

                    曾經一個解釋說,多次使用__FILE__宏,雖然得到字符串的內容相同,但是可能地址不同,即同一個字符串常量多次用到時占用不同的地址,這樣導致需要的內存增加了。為了檢測內在泄露, Debug 版本的 new 附加上了調用 new 的文件名與調用所在的行號信息, 這是通過 __FILE__ 和 __LINE__ 來實現的, 這兩個屬于預定義的內部宏, 而之所以要用 THIS_FILE 來代替 __FILE__, 是為了減少程序大小: 如果你在一個文件中有 10000 次對 new 的調用, 那么會生成 10000 個當前文件名的常量字符串(第一個都是由 __FILE__ 宏擴展而來的), 最后生成的目標文件會很大, 而用 THIS_FILE 來代替, 當前文件名只有一份, 傳遞文件名使用 THIS_FILE 指針就可以了。
                        __FILE__和__LINE__一樣都是編譯器定義的宏。當碰到__FILE__時,編譯器會把__FILE__替換成一個字符串,這個字符串就是當前在編譯的文件的路徑名。在DEBUG_NEW的定義中沒有直接使用__FILE__,而是用了THIS_FILE,其目的是為了減小目標文件的大小。假設在某個cpp文件中有100處使用了new,如果直接使用__FILE__,那編譯器會產生100個常量字符串,這100個字符串都是這個cpp文件的路徑名,顯然十分冗余。如果使用THIS_FILE,編譯器只會產生一個常量字符串,那100處new的調用使用的都是指向常量字符串的指針。    
            在   MFC   中,可以使用   DEBUG_NEW   宏代替   new   運算符來幫助定位內存泄漏。在程序的“Debug”版本中,DEBUG_NEW   將為所分配的每個對象跟蹤文件名和行號。當編譯程序的“Release”版本時,DEBUG_NEW   將解析為不包含文件名和行號信息的簡單   new   操作。因此,在程序的“Release”版本中不會造成任何速度損失。  
               
              如果不想重寫整個程序來使用   DEBUG_NEW   代替   new,則可以在源文件中定義下面的宏:  
               
              #define   new   DEBUG_NEW  
              當進行對象轉儲時,用   DEBUG_NEW   分配的每個對象均將顯示被分配到的文件和行號,使您可以查明內存泄漏源。  
               
              MFC   框架的“Debug”版本自動使用   DEBUG_NEW,但代碼不自動使用它。如果希望利用   DEBUG_NEW   的好處,則必須顯式使用   DEBUG_NEW   或   #define   new,如上所示。  
            總起來講,這段代碼的作用就是防止內存泄露,減小程序編譯開銷的。


            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/Ronger0828/archive/2009/01/11/3750962.aspx

            posted on 2010-04-20 15:58 楚天清秋 閱讀(556) 評論(0)  編輯 收藏 引用 所屬分類: VC++
            久久99久久99小草精品免视看| 国产精品xxxx国产喷水亚洲国产精品无码久久一区| 欧美va久久久噜噜噜久久| 日韩欧美亚洲综合久久影院Ds| 国产精品内射久久久久欢欢| 99久久亚洲综合精品网站| 丁香五月综合久久激情| 久久se精品一区二区影院| 国产69精品久久久久9999| 国产福利电影一区二区三区久久久久成人精品综合 | 久久艹国产| 国产午夜免费高清久久影院| 国产精品久久久久影视不卡| 亚洲精品高清国产一久久| 99久久精品免费| 国产亚洲精久久久久久无码AV| 青草久久久国产线免观| 久久无码AV中文出轨人妻| 色综合久久无码中文字幕| 久久香蕉国产线看观看乱码| 欧美一级久久久久久久大片| 亚洲日韩中文无码久久| 99久久精品国产一区二区蜜芽| 亚洲另类欧美综合久久图片区| 亚洲成色WWW久久网站| 国产精品VIDEOSSEX久久发布| 少妇熟女久久综合网色欲| 精品免费久久久久久久| 久久无码一区二区三区少妇| 人妻精品久久无码区| 色综合久久天天综线观看| 成人国内精品久久久久影院| 亚洲精品美女久久久久99小说| 国产精品无码久久久久久| 国产精品久久久久久久久久影院 | 免费精品国产日韩热久久| 97久久超碰成人精品网站| 久久99热这里只频精品6| 国产精品熟女福利久久AV| 久久国产色AV免费观看| 久久久久亚洲AV无码观看|