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

            內存溢出檢測學習

              最近發現CRT控制臺程序沒有TRACE和內存溢出檢查,很郁悶。無聊中翻看MSDN的Memory Management and the Debug Heap篇,發現C的Debug版本用_malloc_dbg代替malloc,而_malloc_dbg者給數據堆加上一個控制頭組成鏈表,方便記錄溢出。原話如下:
              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:
              那個控制頭的數據結構如下:
            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種內存塊,具體含義還沒有搞清楚,分別如下
            /* 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
              檢測內存溢出用_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++

            <2009年10月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            統計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            設計模式 網絡編程

            網絡

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            污污内射久久一区二区欧美日韩| 性做久久久久久免费观看| 奇米影视7777久久精品人人爽 | 97久久精品午夜一区二区| 久久91综合国产91久久精品| 色综合久久88色综合天天| 久久久久久亚洲精品不卡| 久久人人爽人人爽人人片AV麻烦| 久久棈精品久久久久久噜噜| 精品久久久无码中文字幕| 午夜精品久久久久久影视riav| 久久超乳爆乳中文字幕| 久久99精品久久久久久9蜜桃 | 午夜精品久久久久久久久| 一本色道久久88加勒比—综合| 伊人久久亚洲综合影院| 久久久久久免费一区二区三区| 精品久久亚洲中文无码| 久久久久国产| 狠狠色伊人久久精品综合网| 亚洲日本va中文字幕久久| 久久久WWW成人免费毛片| 久久国产精品久久精品国产| 综合网日日天干夜夜久久| 久久精品免费大片国产大片| 国产三级久久久精品麻豆三级| 国产成人综合久久精品红| 久久久久人妻一区精品| 大蕉久久伊人中文字幕| 国产欧美久久久精品| 1000部精品久久久久久久久| 亚洲中文字幕久久精品无码喷水| 亚洲精品乱码久久久久久不卡| 一本伊大人香蕉久久网手机| 日韩一区二区久久久久久 | 色综合久久无码中文字幕| 久久久国产亚洲精品| 女人高潮久久久叫人喷水| 天天综合久久一二三区| 久久国产成人午夜aⅴ影院 | 久久精品aⅴ无码中文字字幕不卡|