為什麼DEBUG的時候,記憶體裡都是“燙燙燙燙燙燙燙燙燙……”呢?

來源:互聯網
上載者:User

是記憶體太熱了嗎?哈哈,當然不是。。

以下轉自CSDN

 

在   Debug   模式下會自動加上   /GZ   編譯選項,它可以協助捕獲記憶體錯誤。  
   
  /GZ   選項會做以下這些事  
   
  (1)   初始化記憶體和變數。包括用   0xCC   初始化所有自動變數,0xCD   (   Cleared   Data   )   初始化堆中分配的記憶體(即動態分配的記憶體,例如   new   ),0xDD   (   Dead   Data   )   填充已被釋放的堆記憶體(例如   delete   ),0xFD(   deFencde   Data   )   初始化受保護的記憶體(debug   版在動態分配記憶體的前後加入保護記憶體以防止越界訪問),其中括弧中的詞是微軟建議的助記詞。這樣做的好處是這些值都很大,作為指標是不可能的(而且   32   位系統中指標很少是奇數值,在有些系統中奇數的指標會產生執行階段錯誤),作為數值也很少遇到,而且這些值也很容易辨認,因此這很有利於在   Debug   版中發現   Release   版才會遇到的錯誤。要特別注意的是,很多人認為編譯器會用   0   來初始設定變數,這是錯誤的(而且這樣很不利於尋找錯誤)。  
   
  (2)   通過函數指標調用函數時,會通過檢查棧指標驗證函式調用的匹配性。(防止原形不匹配)  
   
  (3)   函數返回前檢查棧指標,確認未被修改。(防止越界訪問和原形不匹配,與第二項合在一起可大致類比幀指標省略FPO)  
   
  “燙”字的MBCS編碼為“CCCC”,而用   /GZ   選項對自動變數會用“0xCC”初始化,連續的“0xCC”將被誤讀成“燙”字元。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.