• <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)存溢出檢測學習

              最近發(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 閱讀(1067) 評論(0)  編輯 收藏 引用 所屬分類: C++

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

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

            網(wǎng)絡(luò)

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久亚洲AV无码西西人体| 久久久久亚洲AV无码去区首| 午夜精品久久久内射近拍高清| 午夜精品久久久久久影视777| 怡红院日本一道日本久久 | 久久精品国产亚洲av麻豆色欲| 亚洲女久久久噜噜噜熟女| 国产精品久久久久9999高清| 91久久精品国产免费直播| 99久久国产综合精品女同图片| 亚洲国产成人久久精品影视| 久久99精品国产麻豆婷婷| 国产精品久久一区二区三区| 久久久久无码中| 国产精品热久久毛片| 亚洲综合精品香蕉久久网97| 色天使久久综合网天天| 国产精品久久久福利| 久久久噜噜噜久久中文字幕色伊伊| 精品水蜜桃久久久久久久| 亚洲乱码中文字幕久久孕妇黑人| 久久久精品久久久久特色影视| 久久精品国产亚洲AV麻豆网站| 麻豆精品久久久久久久99蜜桃| 久久这里的只有是精品23| 999久久久国产精品| 久久久av波多野一区二区| 久久人与动人物a级毛片| 久久国产成人午夜aⅴ影院| 国产精品久久久久9999| 精品乱码久久久久久久| 久久精品国产精品青草app| 久久免费高清视频| 久久久精品波多野结衣| 99久久夜色精品国产网站| 久久Av无码精品人妻系列| 人妻少妇久久中文字幕一区二区 | 久久这里有精品| 色婷婷久久综合中文久久一本| 国产福利电影一区二区三区久久老子无码午夜伦不 | 77777亚洲午夜久久多人|