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

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導航

            統計

            常用鏈接

            留言簿(3)

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产精品久久久久久久 | 久久亚洲2019中文字幕| 久久精品国产99国产电影网| 91精品国产91久久| 国产69精品久久久久APP下载| 久久精品无码专区免费青青| 国产精品日韩深夜福利久久| 香蕉久久av一区二区三区| 国产午夜电影久久| 亚洲精品乱码久久久久久自慰| 99久久国语露脸精品国产| 婷婷国产天堂久久综合五月| 久久美女人爽女人爽| 久久久久高潮综合影院| 国产成人精品久久综合| 久久国产亚洲高清观看| 久久这里的只有是精品23| 99久久伊人精品综合观看| 国内精品久久久久伊人av | 一本久久a久久精品vr综合| 久久青青草原亚洲av无码| 久久精品视频网| 国产亚洲精久久久久久无码 | 久久被窝电影亚洲爽爽爽| 国产偷久久久精品专区| 中文字幕精品久久久久人妻| 久久精品国产精品亚洲下载| 国产精品美女久久久久av爽| 99久久精品国产高清一区二区| 亚洲av日韩精品久久久久久a| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲综合婷婷久久| jizzjizz国产精品久久| 成人免费网站久久久| 2021少妇久久久久久久久久| 国内精品久久人妻互换| 成人免费网站久久久| 色综合久久88色综合天天| 国产亚洲精久久久久久无码AV| 精品久久久久久无码国产| 国产亚州精品女人久久久久久|