• <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 閱讀(865) 評論(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蜜桃 | 国产69精品久久久久777| 国内精品久久久久影院免费| 久久高清一级毛片| 精品久久久久久久国产潘金莲| 久久偷看各类wc女厕嘘嘘| 久久国产成人午夜aⅴ影院| 亚洲Av无码国产情品久久| 99久久久精品| 三级三级久久三级久久 | 久久狠狠爱亚洲综合影院| 青草影院天堂男人久久| 午夜精品久久久久久久| 久久九九久精品国产免费直播| 日韩人妻无码精品久久免费一 | 国产免费久久精品丫丫| 奇米影视7777久久精品| 色综合久久夜色精品国产| 国产视频久久| 国产精品美女久久久久av爽 | 很黄很污的网站久久mimi色| 囯产极品美女高潮无套久久久| 国产高潮国产高潮久久久91 | 伊人丁香狠狠色综合久久| 精品久久亚洲中文无码| 亚洲婷婷国产精品电影人久久| 曰曰摸天天摸人人看久久久| 97久久天天综合色天天综合色hd| 亚洲综合伊人久久综合| 亚洲а∨天堂久久精品| 日本精品久久久久中文字幕8| 无码国内精品久久人妻麻豆按摩| 99国内精品久久久久久久| 久久精品免费观看| 99久久亚洲综合精品成人| 国产激情久久久久影院老熟女| 欧美一区二区精品久久| 久久精品国产亚洲精品|