有趣的“烫烫烫烫”和“屯屯屯屯”

在Visual Studio中的Debug模式下,如果声明一个变量,但是没有初始化,微软会给未初始化的内存复制为0xCC。给为初始化的内存赋0xCC是有原因的,0xCC其实是INT3中断指令,所以如果在Debug模式下试图去执行这块未初始化的内存的话就会中断程序。

这里出现的”烫”其实是因为VS中调试器默认的字符集是MBCS,而在MBCS中0xCCCC正好就是中文中的”烫”,所以就出现了我们熟悉的烫内存!


至于“屯”,是因为如果在堆中分配的内存,即用new 命令分配的,默认的值是0xCD。而0xCDCD在MBCS字符集里正好是“屯”。


上面那个栈内存中,除了我们分配的四个char(红色框出),还有另外几个0xCC,这些地址也是微软为我们自动填充的,主要目的也是为了防止一些越界的情况,可以让程序员在Debug模式下能够发现一些Release时会碰到的错误。这个内存填充在Release模式下是不会有的!

你可能感兴趣的:(debug,内存,栈,调试,Visual,Studio)