在Visual Studio C ++中,内存分配表示是什么?

在Visual Studio中,我们都有“baadf00d”,在运行时在C ++中检查debugging器中的variables时看到“CC”和“CD”。

据我所知,“CC”处于DEBUG模式,仅用于指示内存何时已经new()或alloc()和单位化。 “CD”代表删除或释放的内存。 我只在RELEASE版本中看过“baadf00d”(但我可能是错的)。

有一段时间,我们陷入了内存泄漏,缓冲区溢出等情况,这些信息派上用场。

有人会指出什么时候以什么模式将内存设置为可识别的字节模式,以便进行debugging?

这个链接有更多的信息:

http://en.wikipedia.org/wiki/Magic_number_(programming);

 * 0xABABABAB:在分配的堆内存后,由Microsoft的HeapAlloc()用来标记“无人地带”保护字节* 0xABADCAFE:启动这个值来初始化所有空闲内存来捕获错误的指针* 0xBAADF00D:由微软的LocalAlloc(LMEM_FIXED)标记未初始化分配的堆内存* 0xBADCAB1E:连接切断到debugging器时返回给Microsoft eVCdebugging器的错误代码* 0xBEEFCACE:由Microsoft .NET用作资源文件中的幻数* 0xCCCCCCCC:用于由Microsoft的C ++debugging运行时库标记未初始化的堆栈内存* 0xCDCDCDCD:由Microsoft的C ++debugging运行时库用于标记未初始化的堆内存* 0xDDDDDDDD:由Microsoft的C ++debugging堆用于标记释放的堆内存* 0xDEADDEAD:用户手动启动崩溃时使用的Microsoft Windows STOP错误代码。  * 0xFDFDFDFD:被微软的C ++debugging堆用来在分配的堆内存之前和之后标记“无人地带”保护字节* 0xFEEEFEEE:被微软的HeapFree()用来标记释放的堆内存 

实际上添加了很多有用的信息来debugging分配。 这个表格比较完整:

http://www.nobugs.org/developer/win32/debug_crt_heap.html#table

地址偏移后HeapAlloc()malloc()后free()后HeapFree()注释
 0x00320FD8 -40 0x01090009 0x01090009 0x01090009 0x0109005A Win32堆信息
 0x00320FDC -36 0x01090009 0x00180700 0x01090009 0x00180400 Win32堆信息
 0x00320FE0 -32 0xBAADF00D 0x00320798 0xDDDDDDDD 0x00320448 Ptr到下一个CRT堆块(在较早时间分配)
 0x00320FE4 -28 0xBAADF00D 0x00000000 0xDDDDDDDD 0x00320448 Ptr到prev CRT堆块(稍后分配)
 0x00320FE8 -24 0xBAADF00D 0x00000000 0xDDDDDDDD 0xFEEEFEEE malloc()调用的文件名
 0x00320FEC -20 0xBAADF00D 0x00000000 0xDDDDDDDD 0xFEEEFEEE malloc()调用的行号
 0x00320FF0 -16 0xBAADF00D 0x00000008 0xDDDDDDDD 0xFEEEFEEE到malloc()的字节数
 0x00320FF4 -12 0xBAADF00D 0x00000001 0xDDDDDDDD 0xFEEEFEEEtypes(0 =释放,1 =正常,2 = CRT使用等)
 0x00320FF8 -8 0xBAADF00D 0x00000031 0xDDDDDDDD 0xFEEEFEEE请求#,从0
 0x00320FFC -4 0xBAADF00D 0xFDFDFDFD 0xDDDDDDDD 0xFEEEFEEE No mans land
 0x00321000 +0 0xBAADF00D 0xCDCDCDCD 0xDDDDDDDD 0xFEEEFEEE你想要的8个字节
 0x00321004 +4 0xBAADF00D 0xCDCDCDCD 0xDDDDDDDD 0xFEEEFEEE你想要的8个字节
 0x00321008 +8 0xBAADF00D 0xFDFDFDFD 0xDDDDDDDD 0xFEEEFEEE No mans land
 0x0032100C +12 0xBAADF00D 0xBAADF00D 0xDDDDDDDD 0xFEEEFEEE Win32堆分配四舍五入到16个字节
 0x00321010 + 16 0xABABABAB 0xABABABAB 0xABABABAB 0xFEEEFEEE Win32堆簿记
 0x00321014 + 20 0xABABABAB 0xABABABAB 0xABABABAB 0xFEEEFEEE Win32堆簿记
 0x00321018 + 24 0x00000010 0x00000010 0x00000010 0xFEEEFEEE Win32堆簿记
 0x0032101C +28 0x00000000 0x00000000 0x00000000 0xFEEEFEEE Win32堆簿记
 0x00321020 +32 0x00090051 0x00090051 0x00090051 0xFEEEFEEE Win32堆簿记
 0x00321024 + 36 0xFEEE0400 0xFEEE0400 0xFEEE0400 0xFEEEFEEE Win32堆簿记
 0x00321028 + 40 0x00320400 0x00320400 0x00320400 0xFEEEFEEE Win32堆簿记
 0x0032102C + 44 0x00320400 0x00320400 0x00320400 0xFEEEFEEE Win32堆簿记