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

            <2009年11月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            導航

            統計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            設計模式 網絡編程

            網絡

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            秋霞久久国产精品电影院| 久久99精品国产| 欧美亚洲国产精品久久久久| 国产精品成人久久久| 久久综合88熟人妻| 久久精品国产精品亚洲精品| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 国产成人无码久久久精品一| 国产精品九九久久免费视频| 奇米影视7777久久精品人人爽| 久久精品国产久精国产思思| 国产精品熟女福利久久AV| 亚洲va久久久噜噜噜久久狠狠| 久久久久中文字幕| 青青草原综合久久大伊人| 久久国产视屏| 国产精品久久自在自线观看| 免费久久人人爽人人爽av| 99久久精品无码一区二区毛片 | 国内精品久久九九国产精品| 亚洲欧美一级久久精品| 91久久精品电影| 久久亚洲AV成人出白浆无码国产| 久久久青草青青国产亚洲免观| 91精品国产高清久久久久久io| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 国内精品久久久人妻中文字幕| 亚洲v国产v天堂a无码久久| 久久―日本道色综合久久| 精品蜜臀久久久久99网站| 一本久久a久久精品亚洲| 精品久久久久久无码不卡| 亚洲伊人久久综合影院| 亚洲欧美国产日韩综合久久| 欧美日韩成人精品久久久免费看 | 久久久久久亚洲精品不卡| 色综合久久精品中文字幕首页| 久久综合精品国产二区无码| 亚洲精品乱码久久久久久久久久久久| AAA级久久久精品无码区| 国产精品九九久久免费视频 |