• <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>

            內(nèi)存溢出檢測學(xué)習(xí)

              最近發(fā)現(xiàn)CRT控制臺程序沒有TRACE和內(nèi)存溢出檢查,很郁悶。無聊中翻看MSDN的Memory Management and the Debug Heap篇,發(fā)現(xiàn)C的Debug版本用_malloc_dbg代替malloc,而_malloc_dbg者給數(shù)據(jù)堆加上一個控制頭組成鏈表,方便記錄溢出。原話如下:
              When you request a memory block, the debug heap manager allocates from the base heap a slightly larger block of memory than requested and returns a pointer to your portion of that block. For example, suppose your application contains the call: malloc( 10 ). In a release build, malloc would call the base heap allocation routine requesting an allocation of 10 bytes. In a debug build, however, malloc would call _malloc_dbg, which would then call the base heap allocation routine requesting an allocation of 10 bytes plus approximately 36 bytes of additional memory. All the resulting memory blocks in the debug heap are connected in a single linked list, ordered according to when they were allocated:
              那個控制頭的數(shù)據(jù)結(jié)構(gòu)如下:
            typedef struct _CrtMemBlockHeader
            {
            // Pointer to the block allocated just before this one:
               struct _CrtMemBlockHeader *pBlockHeaderNext; 
            // Pointer to the block allocated just after this one:
               struct _CrtMemBlockHeader *pBlockHeaderPrev; 
               
            char *szFileName;   // File name
               int nLine;          // Line number
               size_t nDataSize;   // Size of user block
               int nBlockUse;      // Type of block
               long lRequest;      // Allocation number
            // Buffer just before (lower than) the user's memory:
               unsigned char gap[nNoMansLandSize];  
            } _CrtMemBlockHeader;

              這個nBlockUse有6種內(nèi)存塊,具體含義還沒有搞清楚,分別如下
            /* Memory block identification */
            #define _FREE_BLOCK      0
            #define _NORMAL_BLOCK    1
            #define _CRT_BLOCK       2
            #define _IGNORE_BLOCK    3
            #define _CLIENT_BLOCK    4
            #define _MAX_BLOCKS      5
              檢測內(nèi)存溢出用_CrtDumpMemoryLeaks(),在crtdbg.h中定義。有時間研究一下crtdbg.h文件。
              參考http://www.cnblogs.com/phinecos/archive/2009/10/29/1592604.html


            posted on 2009-11-03 22:53 gewala 閱讀(1063) 評論(0)  編輯 收藏 引用 所屬分類: C++

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            設(shè)計模式 網(wǎng)絡(luò)編程

            網(wǎng)絡(luò)

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            日本高清无卡码一区二区久久 | 久久久久国产精品嫩草影院| 国内精品久久久久久99| 国产Av激情久久无码天堂| 国产成人久久久精品二区三区| 久久久久综合国产欧美一区二区| 国内高清久久久久久| 久久天堂电影网| 国产成人精品综合久久久 | 国产福利电影一区二区三区,免费久久久久久久精 | 日本欧美久久久久免费播放网| 狠狠久久亚洲欧美专区| 日韩精品久久久久久久电影| 久久精品人成免费| 伊人色综合久久天天网| 久久精品视频免费| 色诱久久久久综合网ywww | 成人国内精品久久久久影院VR| 欧美日韩精品久久久久| 久久久久久久99精品免费观看| 国产精品久久久久久久久久影院| 精品国产VA久久久久久久冰| 久久久久久久久66精品片| 大香网伊人久久综合网2020| 老色鬼久久亚洲AV综合| 伊人久久精品无码av一区| 久久国产美女免费观看精品| 精品999久久久久久中文字幕| 亚洲欧美伊人久久综合一区二区| 久久青青草原精品国产不卡| 久久综合综合久久97色| 久久青青草原精品国产| 亚洲国产另类久久久精品小说| 久久夜色精品国产www| 久久se精品一区二区影院| 精品久久久久久| 色综合久久88色综合天天| 国内精品久久久久| 99久久精品国产一区二区| 国产精自产拍久久久久久蜜| 精品人妻伦九区久久AAA片69 |