vc在debug模式下编译出来的代码中,每次进入函数,都会有这么几句汇编代码:
lea edi,[ebp-0E0h] // ebp-0E0h是可变的
mov ecx,38h // 38h是可变的
mov eax,0CCCCCCCCh
rep stos dword ptres:[edi]
这4行汇编码的作用就是将函数栈的空间全部用0xcc填充,目的就是将0xcc作为栈空间里未初始化值的标志。
debug版初始化成0xcc是因为0xcc在x86下是一条int 3单步中断指令,这样程序如果跑飞了遇到0xcc就会停下来,这和单片机编程时一般将没用的代码空间填入jmp 0000语句是一样地
VC 会把未初始化的栈内存全部填成 0xcc,当字符串看就是 烫烫烫烫……
会把未初始化的堆内存全部填成 0xcd,当字符串看就是 屯屯屯屯……
但是 Release 模式下不会有这种附加动作,原来那块内存里是什么就是什么