我的代碼如下所示:C++內存分配問題
#include <string.h>
int main()
{
int ii = 123;
char str[7] = "";
strcpy(str,"123456");
return 0;
}
我在VS2010運行這一點,記憶就像下面
我很好奇,在內存中的cc
使用什麼對於?以及如何計算cc
的數量?
我的代碼如下所示:C++內存分配問題
#include <string.h>
int main()
{
int ii = 123;
char str[7] = "";
strcpy(str,"123456");
return 0;
}
我在VS2010運行這一點,記憶就像下面
我很好奇,在內存中的cc
使用什麼對於?以及如何計算cc
的數量?
在Visual Studio中爲「調試」編譯時,cc
經常用於填充未初始化的內存。這樣,訪問未初始化的內存時就更加明顯了。
例如,如果您嘗試取消引用未初始化的指針,你可能會得到這樣的:
Access Violation accessing 0xcccccccc
或類似的東西。
當您訪問未初始化的內存空間,VC2010會一直提醒你,你已經使用了一個包含0xcccccccc
一些地址,
0xcc
是由編譯器使用的(在調試版本)的值填滿未初始化的內存。
爲什麼MS選擇'0xCC'作爲填充值?因爲'0xCC'是x86指令集中的單字節斷點指令。這樣,如果你不小心執行了未填充的內存,它會立即觸發一個斷點。 – 2012-03-04 04:30:02
@Rob我不知道。 :)我想現在我們有內存保護,這不太重要? – Mysticial 2012-03-04 04:31:43
@Mysticial:並非如此:只適用於頁面級別(整個頁面可以標記爲可執行或不可執行,並且只有當CPU,操作系統和進程都同意啓用NX位時)。但是如果從2KB頁面中使用40字節的代碼呢?頁面必須標記爲可執行文件,這會使頁面的其餘部分可執行,但包含垃圾:) – jalf 2012-03-04 12:12:14