相关疑难解决方法(0)

何时以及为什么操作系统会在malloc/free/new/delete上将内存初始化为0xCD,0xDD等?

我知道操作系统有时会使用某些模式(如0xCD和0xDD)初始化内存.我想知道的是何时以及为什么会发生这种情况.

什么时候

这是否特定于编译器使用?

对于这个,malloc/new和free/delete的工作方式是否相同?

它是特定于平台的吗?

它会出现在其他操作系统上,例如Linux或VxWorks吗?

为什么

我的理解是这只发生在Win32调试配置中,它用于检测内存溢出并帮助编译器捕获异常.

你能举一个关于这个初始化如何有用的实际例子吗?

我记得读过一些东西(可能在Code Complete 2中),在分配内存时将内存初始化为已知模式是好的,某些模式会触发Win32中的中断,这将导致调试器中出现异常.

这有多便携?

c c++ memory memory-management

120
推荐指数
3
解决办法
3万
查看次数

任何人都可以帮我解释WinDbg中这个简单的反汇编吗?

我得到了以下简单的C++代码:

#include <stdio.h>
int main(void)
{
    ::printf("\nHello,debugger!\n");
}
Run Code Online (Sandbox Code Playgroud)

从WinDbg,我得到了以下反汇编代码:

SimpleDemo!main:
01111380 55              push    ebp
01111381 8bec            mov     ebp,esp
01111383 81ecc0000000    sub     esp,0C0h
01111389 53              push    ebx
0111138a 56              push    esi
0111138b 57              push    edi
0111138c 8dbd40ffffff    lea     edi,[ebp-0C0h]
01111392 b930000000      mov     ecx,30h
01111397 b8cccccccc      mov     eax,0CCCCCCCCh
0111139c f3ab            rep stos dword ptr es:[edi]
0111139e 8bf4            mov     esi,esp
011113a0 683c571101      push    offset SimpleDemo!`string' (0111573c)
011113a5 ff15b0821101    call    dword ptr [SimpleDemo!_imp__printf (011182b0)]
011113ab 83c404          add     esp,4
011113ae 3bf4            cmp     esi,esp
011113b0 e877fdffff …
Run Code Online (Sandbox Code Playgroud)

c c++ debugging assembly

11
推荐指数
1
解决办法
7300
查看次数

标签 统计

c ×2

c++ ×2

assembly ×1

debugging ×1

memory ×1

memory-management ×1