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

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

            導航

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

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

            網(wǎng)絡(luò)

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲精品国产综合久久一线| 亚洲精品国产美女久久久| 丁香五月网久久综合| 97久久国产综合精品女不卡| 亚洲午夜久久久久久噜噜噜| 久久亚洲私人国产精品vA| 97久久超碰成人精品网站| 国产精品成人久久久久三级午夜电影| 久久人人爽人人精品视频| 国产成年无码久久久免费| 久久精品国产99国产精偷| 中文字幕久久亚洲一区| 久久国产精品久久精品国产| 久久毛片一区二区| 精品乱码久久久久久夜夜嗨| 久久亚洲精品国产精品婷婷| 久久国产成人精品麻豆| 亚洲乱码日产精品a级毛片久久| 午夜精品久久久久久久无码| 精品视频久久久久| 久久亚洲欧美国产精品| 久久精品国产精品亚洲艾草网美妙| 亚洲国产日韩欧美综合久久| 777米奇久久最新地址| 国内精品久久久久影院亚洲| 7国产欧美日韩综合天堂中文久久久久| 久久天天躁狠狠躁夜夜不卡| 天天综合久久久网| AV狠狠色丁香婷婷综合久久| 人妻少妇久久中文字幕一区二区| 久久久这里有精品中文字幕| 亚洲欧美精品伊人久久| 91精品国产91久久久久福利| 亚洲国产精品无码久久久不卡| 日韩AV毛片精品久久久| 久久性精品| 久久久久无码专区亚洲av| 久久高清一级毛片| 久久精品人妻一区二区三区| 久久综合久久性久99毛片| 免费一级做a爰片久久毛片潮|