• <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ù)結構如下:
            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

            導航

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            設計模式 網(wǎng)絡編程

            網(wǎng)絡

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久人人爽人人爽人人AV| 青青草国产成人久久91网| 伊人久久国产免费观看视频| 久久夜色撩人精品国产| 国产亚洲精久久久久久无码77777| 成人综合久久精品色婷婷| 久久精品亚洲中文字幕无码麻豆| 久久夜色tv网站| 99久久国产精品免费一区二区| 久久本道伊人久久| 国产精品久久久久久久久软件| 久久国产精品一区二区| 大香伊人久久精品一区二区| 热久久这里只有精品| 日韩精品久久久久久久电影蜜臀| 亚洲国产二区三区久久| 久久久久女人精品毛片| 狠狠色丁香久久婷婷综合| 久久天天躁狠狠躁夜夜av浪潮| 久久国产精品-国产精品| 久久中文字幕人妻熟av女| 国产巨作麻豆欧美亚洲综合久久| 亚洲av成人无码久久精品| 色婷婷噜噜久久国产精品12p| 国产精品成人99久久久久91gav| 精品久久久久久国产潘金莲| 久久WWW免费人成一看片| 亚洲人成无码久久电影网站| 丁香久久婷婷国产午夜视频| 久久久久国产一级毛片高清版| 久久久久亚洲精品无码蜜桃| 久久综合88熟人妻| 久久精品国产精品亚洲毛片 | 久久久久久久久无码精品亚洲日韩 | 久久久久亚洲精品男人的天堂| 国产高潮国产高潮久久久| 久久精品亚洲日本波多野结衣 | 香蕉99久久国产综合精品宅男自 | 日本久久中文字幕| 亚洲第一永久AV网站久久精品男人的天堂AV| 狠狠色噜噜狠狠狠狠狠色综合久久|