severewinner 发表于 2012-5-30 15:01:52

请教VC初始化时内存为什么为0xcdcdcd

请教VC初始化时内存为什么为0xcdcdcd
VC的内存默认为0xcdcdcd为什么
若变量未初始化读出的值就是0xcdcdcd,请问这个值有什么特殊么?

jpchen 发表于 2012-5-30 15:13:01

VC的debug版本使用0xcdcdcdcd来填充堆,这样当你访问到的内容是0xcdcdcdcd,就表示你没有初始化这块内存,便于你查错,因为忘记初始化是程序逻辑错误,编译器无法自动帮你查出,就用这种方法来提示你。
Release版本没这个功能,因为填充需要时间,会影响程序启动速度。
至于为何是0xcdcdcdcd,应该是没有特定理由的,就是看起来方便,当时微软头脑一热,就定成这个数了,其实定成0xbcbcbcbc也是一样的。

severewinner 发表于 2012-5-30 15:29:23

jpchen 发表于 2012-5-30 15:13 static/image/common/back.gif
VC的debug版本使用0xcdcdcdcd来填充堆,这样当你访问到的内容是0xcdcdcdcd,就表示你没有初始化这块内存, ...

CD 的意思是 Cleared data 刚刚查到,英文缩写,谢谢你的回答

jpchen 发表于 2012-5-30 16:42:48

severewinner 发表于 2012-5-30 15:29 static/image/common/back.gif
CD 的意思是 Cleared data 刚刚查到,英文缩写,谢谢你的回答

这倒是第一次听到,微软开发人员说的?还是网上有人猜的?

stdio 发表于 2012-5-30 17:32:39

本帖最后由 stdio 于 2012-5-30 17:33 编辑

0xcd,是X86的一条指令,“int”
比如:汇编的 int 03h,对应的指令码就是 cd 03
把空内存填成cd的好处,就是不管你jump到内存块的哪个位置,取出的第一个字节都是 cd,就是int指令,然后CPU取第二个字节,作为int的参数。
那就是 int 0cdh 咯。
然后,VC的debuger就把 cd号中断设置好,比如显示一个“非法操作”的信息之类的。

就是守株待兔嘛,不过看起来到处都是柱子而已。。。。。。

severewinner 发表于 2012-5-30 19:00:05

stdio 发表于 2012-5-30 17:32 static/image/common/back.gif
0xcd,是X86的一条指令,“int”
比如:汇编的 int 03h,对应的指令码就是 cd 03
把空内存填成cd的好处, ...

您说的这个因该是对的

没用过x86,请问 0xcd 就 int 指令?

那读出来是CD也没什么用啊?

severewinner 发表于 2012-5-30 19:00:29

jpchen 发表于 2012-5-30 16:42 static/image/common/back.gif
这倒是第一次听到,微软开发人员说的?还是网上有人猜的?

我不知道,只能说是网上找到的

jpchen 发表于 2012-5-30 19:07:31

stdio 发表于 2012-5-30 17:32 static/image/common/back.gif
0xcd,是X86的一条指令,“int”
比如:汇编的 int 03h,对应的指令码就是 cd 03
把空内存填成cd的好处, ...

有道理,应该就是这个原因
页: [1]
查看完整版本: 请教VC初始化时内存为什么为0xcdcdcd