• <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 閱讀(836) 評論(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這些函數都有自己的實現,
            另外感謝你的回答呵呵...還會關注你這里的.  回復  更多評論   

            <2007年10月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            導航

            統計

            常用鏈接

            留言簿(3)

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            三级三级久久三级久久| 欧美综合天天夜夜久久| 一本色道久久99一综合| 99国产精品久久| 久久久久亚洲?V成人无码| 色天使久久综合网天天| 狠狠精品久久久无码中文字幕| 国产激情久久久久影院| 狠狠色婷婷久久一区二区| 伊人久久综在合线亚洲2019 | 精品久久久久久无码专区| www亚洲欲色成人久久精品| 亚洲AV无码久久精品狠狠爱浪潮 | 久久久黄片| 国产精品一久久香蕉国产线看| 热综合一本伊人久久精品| 国产精品久久一区二区三区| 狠狠色丁香婷婷久久综合五月 | 久久性生大片免费观看性| 91久久婷婷国产综合精品青草| 香蕉久久影院| 久久精品国产亚洲av瑜伽| 久久久精品免费国产四虎| 久久久久女人精品毛片| 少妇高潮惨叫久久久久久| 国内精品伊人久久久久妇| 久久精品国产亚洲5555| 国产精品gz久久久| 91精品国产高清久久久久久国产嫩草| 亚洲精品无码久久久久| 国产成人精品综合久久久| 欧美日韩精品久久免费| 久久热这里只有精品在线观看| 精品久久久久久无码中文野结衣| 久久美女人爽女人爽| 91麻豆精品国产91久久久久久| 久久噜噜电影你懂的| 久久精品综合一区二区三区| 久久精品人妻一区二区三区| 一级a性色生活片久久无少妇一级婬片免费放| 人人狠狠综合久久亚洲88|