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

            內存填充值的理解

            1、使用 new 或者 malloc 分配后的內存,其內容被填充為 0xCD,CRT 中稱處于這種狀態的內存區為 Clean Land,即干凈區,由此推測 0xCD 的含義可能為 Clean Data。在此數據的前后(不包含于此區域內),各有一個守衛用的 DWORD,其內容為 0xFDFDFDFD。
            2、使用 delete 或者 free 釋放后的內存,其內容被清空為 0xDD,CRT 中稱處于這種狀態的內存區為 Dead Land,即死區,由此推測 0xDD 的含義可能為 Dead Data。守衛用 DWORD 也同時被清除。
            3、使用 HeapAlloc 分配的內存,其內容被填充為 0xBAADF00D,我推測為 Bad Food 的變體,經過 HeadFree 釋放的內存,其大部分內容會被填充為 0xFEEE,但起始的兩個 DWORD 不是,在我的機器上這兩個 DWORD 的值均為 0x00140238,含義不詳。
             
            在簡單的測試中,delete/free 最終總會調用到 HeapFree,因而看到的釋放后的內存中是 0xFEEE,而 new/malloc 雖然調用了 HeapAlloc,但之后又填充了 0xCD,故而看到的是 0xCD。
             
            記憶中有過釋放之后看到 0xDD 的情況,而且 CRT 的代碼里也的確有并不立刻調用 HeapFree 來真正釋放內存的分支,但測試代碼并未達到。
             
            另外,0xCC 也是有的,好像是編譯器做的事情之一,用于填充棧上的自動變量。
             
            上述 CRT 的行為均為 Debug 版本的表現。
             
            上述的系統行為(即 HeapXXX 函數族的行為)均為在 Windows Xp SP2 上的表現。

            posted on 2007-10-16 16:53 Randy 閱讀(879) 評論(8)  編輯 收藏 引用

            評論

            # re: 內存填充值的理解 2008-08-18 10:04 Anon

            那請問為什么我的測試結果代碼是:
            char *pc = (char *)malloc(4);
            int i;
            for (i = 0;i < 4;i++)
            printf("%x",pc[i]);
            free(pc);
            為什么結果是0000 ??  回復  更多評論   

            # re: 內存填充值的理解 2008-08-18 10:10 Randy

            @Anon
            請描述一下你的測試環境,或者是不是在debug下測試的。  回復  更多評論   

            # re: 內存填充值的理解 2008-08-18 10:46 Anon

            WinXP, 編譯器GCC, Debug版本,謝謝,  回復  更多評論   

            # re: 內存填充值的理解 2008-08-18 10:49 Randy

            @Anon
            此情況特指在微軟的編譯環境下  回復  更多評論   

            # re: 內存填充值的理解 2008-08-18 11:07 Anon

            哦,但是Windows下的GCC,為什么沒有調用MSVC底層調用的系統函數,  回復  更多評論   

            # re: 內存填充值的理解 2008-08-18 11:13 Anon

            還有個問題請教下,在實模式下給出1000:0002,可以尋址到1000<<16+0002的內存,那么如果在保護模式下,虛擬地址給出10000002, 分段單元是否也會做類似的處理?
              回復  更多評論   

            # re: 內存填充值的理解 2008-08-18 11:23 Randy

            @Anon
            內存填充值主要和CRT庫有關,所以是否符合上面所說的只是看編譯環境是否用使用微軟的CRT庫。我并沒有用過GCC編譯。不過GCC使用的肯定不是微軟的CRT庫吧。第二個問題的話,我也不是很清楚,呵呵幫不到你  回復  更多評論   

            # re: 內存填充值的理解 2008-08-18 11:27 Anon

            哦, 你這么一說明白起來了,GCC的 CRT庫和MS不同,像malloc這些函數都有自己的實現,
            另外感謝你的回答呵呵...還會關注你這里的.  回復  更多評論   

            <2008年10月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導航

            統計

            常用鏈接

            留言簿(3)

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国内精品久久久久久久coent| 久久久噜噜噜久久| 久久亚洲国产精品成人AV秋霞| 国内精品久久久久久久影视麻豆 | 久久精品国产99久久久古代| 亚洲国产视频久久| 久久久久人妻一区二区三区vr| 午夜精品久久久久久中宇| 精品国产乱码久久久久久人妻| 国内精品伊人久久久久777| 国内精品人妻无码久久久影院导航 | 国产成人久久久精品二区三区| 久久久久久久99精品免费观看| 国内精品久久久久久久影视麻豆 | 久久久久亚洲精品日久生情| 亚洲精品乱码久久久久久久久久久久 | 久久久精品久久久久影院| 久久人人添人人爽添人人片牛牛| 人妻少妇久久中文字幕一区二区| 久久香蕉国产线看观看乱码| 久久久艹| 精品久久久久久久无码 | 7777久久亚洲中文字幕| 99久久国产免费福利| 亚洲午夜久久久久妓女影院| 国产成人久久精品麻豆一区| 久久精品国产亚洲av日韩| 国产精品丝袜久久久久久不卡| 亚洲午夜久久久久妓女影院| 久久综合色之久久综合| 久久线看观看精品香蕉国产| 久久久精品人妻一区二区三区蜜桃| 久久发布国产伦子伦精品| 亚洲午夜久久久久久久久久| 亚洲伊人久久综合影院| 国内精品久久久久久久久| 青青草国产精品久久| AV无码久久久久不卡网站下载 | 一本色道久久HEZYO无码| 精品一二三区久久aaa片| 亚洲精品久久久www|