为什么DEBUG的时候,内存里都是“烫烫烫烫烫烫烫烫烫……”呢?
来源:互联网 发布:知乎 中国核电股票 编辑:程序博客网 时间:2024/05/05 21:34
是内存太热了吗?哈哈,当然不是。。
以下转自CSDN
在 Debug 模式下会自动加上 /GZ 编译选项,它可以帮助捕获内存错误。
/GZ 选项会做以下这些事
(1) 初始化内存和变量。包括用 0xCC 初始化所有自动变量,0xCD ( Cleared Data ) 初始化堆中分配的内存(即动态分配的内存,例如 new ),0xDD ( Dead Data ) 填充已被释放的堆内存(例如 delete ),0xFD( deFencde Data ) 初始化受保护的内存(debug 版在动态分配内存的前后加入保护内存以防止越界访问),其中括号中的词是微软建议的助记词。这样做的好处是这些值都很大,作为指针是不可能的(而且 32 位系统中指针很少是奇数值,在有些系统中奇数的指针会产生运行时错误),作为数值也很少遇到,而且这些值也很容易辨认,因此这很有利于在 Debug 版中发现 Release 版才会遇到的错误。要特别注意的是,很多人认为编译器会用 0 来初始化变量,这是错误的(而且这样很不利于查找错误)。
(2) 通过函数指针调用函数时,会通过检查栈指针验证函数调用的匹配性。(防止原形不匹配)
(3) 函数返回前检查栈指针,确认未被修改。(防止越界访问和原形不匹配,与第二项合在一起可大致模拟帧指针省略FPO)
“烫”字的MBCS编码为“CCCC”,而用 /GZ 选项对自动变量会用“0xCC”初始化,连续的“0xCC”将被误读成“烫”字符。
- 为什么DEBUG的时候,内存里都是“烫烫烫烫烫烫烫烫烫……”呢?
- Debug时,内存里怎么都是“烫烫烫烫烫烫”
- Debug时,内存里怎么都是“烫烫烫烫烫烫”
- 为什么在loadrunner录制的时候,action里面都是空的,怎么办呢?
- 有人知道eclipse里面 run as 和 Debug as 为什么执行的结果都是一样的呢
- 在选择相册里照片的时候,取消按钮和确定按钮都是英文的,如何改成中文的呢??
- 为什么接口里声明的都是常量
- 为什么实时时钟的晶振都是32.768KHZ呢
- 为什么实时时钟的晶振都是32.768KHZ呢
- 为什么实时时钟的晶振都是32.768KHZ呢
- 为什么下雪的时候城市就感觉安静了呢?
- 为什么都是C++和Java呢
- 为什么很多网站的表单提交按钮都是…
- 为什么我最近上传的资源用户下载后都是空的呢?
- 为什么CPU到蓝牙的音频传输都是用的PCM接口呢
- 为什么大多数asp.net程序都是用C#来写的呢?
- 为什么很多公司都是用PADS和orCAD的组合来设计硬件呢?
- 为什么很多公司都是用PADS和orCAD的组合来设计硬件呢?
- word
- 打sip电话的几种配置方式:
- Halite的编译过程
- 如何判断输入的是组合键
- sql完全解析
- 为什么DEBUG的时候,内存里都是“烫烫烫烫烫烫烫烫烫……”呢?
- 裸设备
- atexit函数
- java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较
- atexit函数的作用
- 使用VMware构建快采调试环境(C/S结构)
- 什么是CSDN
- dlopen中几个flag的区别
- MTK Camera程序架构(1)