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

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

            導航

            統計

            常用鏈接

            留言簿(3)

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久亚洲AV片无码下载蜜桃| 亚洲国产成人精品91久久久 | 尹人香蕉久久99天天拍| 综合久久精品色| 精品久久久无码人妻中文字幕| 国产日韩欧美久久| 青青青国产精品国产精品久久久久 | 日韩精品久久无码人妻中文字幕| 精品人妻伦一二三区久久| 久久Av无码精品人妻系列| 国产精品99久久久久久猫咪| 久久久亚洲精品蜜桃臀| 97精品国产97久久久久久免费| 亚洲AV无码久久精品色欲| 亚洲精品99久久久久中文字幕| 少妇内射兰兰久久| 久久久久久国产精品美女| 久久久亚洲精品蜜桃臀| 久久精品水蜜桃av综合天堂| 亚州日韩精品专区久久久| 97久久超碰国产精品2021| 久久久久成人精品无码中文字幕 | 久久99精品久久久久久hb无码| 久久久久亚洲精品男人的天堂| 久久国产精品77777| 久久亚洲AV无码精品色午夜麻豆| 波多野结衣久久精品| 99久久国产综合精品五月天喷水| 午夜天堂精品久久久久| 亚洲国产成人久久一区久久| 91精品国产91久久久久久青草| 中文字幕乱码人妻无码久久| 国产精品一区二区久久不卡| 超级97碰碰碰碰久久久久最新| 久久天天躁狠狠躁夜夜av浪潮 | 久久国产精品无码一区二区三区 | 国产三级久久久精品麻豆三级 | 久久久精品午夜免费不卡| 久久久久无码精品国产不卡| 波多野结衣AV无码久久一区| 中文字幕人妻色偷偷久久|