内存中空闲的部分为什么是“CCCCCCC”

清水即心 2012-10-19 10:28:23
用vs2008查看程序内存
发现没有被占用的部分,全是 CCCCCCCCCCCCCCCCCCCCCC
为什么是CCCCCCCCCCCCCCC
而不是别的?
...全文
3534 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
清水即心 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
而且都是微软VS的做法
[/Quote]

也就是说,不是内存中空闲的部分都是CCCC
而是VS把栈中空闲的内存填充为CCCC?
清水即心 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
引用 13 楼 的回复:

引用 10 楼 的回复:
而且都是微软VS的做法


也就是说,不是内存中空闲的部分都是CCCC
而是VS把栈中空闲的内存填充为CCCC?


不是空闲部分,是开辟栈帧时先填充上,有初始化的部分就覆盖上了,未初始化的就保持着填充值

只是栈内存填充为CC

其它内存有有种不同的填充,比如CD,DD,FD,等等

都是在DEBUG配置下用于……
[/Quote]


哦哦哦,多谢多谢~
yisikaipu 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 10 楼 的回复:
而且都是微软VS的做法


也就是说,不是内存中空闲的部分都是CCCC
而是VS把栈中空闲的内存填充为CCCC?
[/Quote]

不是空闲部分,是开辟栈帧时先填充上,有初始化的部分就覆盖上了,未初始化的就保持着填充值

只是栈内存填充为CC

其它内存有有种不同的填充,比如CD,DD,FD,等等

都是在DEBUG配置下用于标记的

总之不可能是软中断
yisikaipu 2012-10-20
  • 打赏
  • 举报
回复
笔误,是RTC,不是CRT
去msdn里搜/rtc了解详情
yisikaipu 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]不是为了优化,试一试下面的程序,你就明白了[/Quote]

栈内存放软中断做什么?代码又不在这里跑。

如果去掉CRT编译选项,就不会有CCCCCCCC填充

而CRT就是用于检测越界和未初始化的变量赋值(当然,这不可能完全做到)
yisikaipu 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]这个软中断的原理不是很懂,可以讲清楚点么[/Quote]

不是什么软中断

仅仅就是用一种特殊的位模式做填充,这样如果越界了容易检查出来

比如,堆内存填充为cdcdcdcd

而且都是微软VS的做法

所谓软中断,是个讹传,是因为这刚好对应汇编指令的断点,就联想到一起了
mujiok2003 2012-10-20
  • 打赏
  • 举报
回复
不是为了优化,试一试下面的程序,你就明白了


int main()
{
//嵌入汇编
//int是指令,表示终端
//3是操作数,表示中断好。3号中断就是软中断
//代码int 3在内存中刚好是一个字节CC
__asm int 3;
return 0;
}

[Quote=引用 4 楼 的回复:]
引用 1 楼 的回复:
软中断:

Assembly code
int 3
的二进制刚好为CC,在debug模式可以帮助发现问题。

这个软中断的原理不是很懂,可以讲清楚点么

会不会是考虑到功耗问题
对硬件的部分不是很了解
空闲为设置为CC的话,正好是“1100 1100 1100 1100”


还有内存写的速度的问题
这样的话,是不是给内存写数据的时候会快一点……
[/Quote]
mujiok2003 2012-10-20
  • 打赏
  • 举报
回复
不是为了优化,试一试下面的程序,你就明白了


int main()
{
//嵌入汇编
//int是指令,表示终端
//3是操作数,表示中断好。3号中断就是软中断
//代码int 3在内存中刚好是一个字节CC
__asm int 3;
return 0;
}

[Quote=引用 4 楼 的回复:]
引用 1 楼 的回复:
软中断:

Assembly code
int 3
的二进制刚好为CC,在debug模式可以帮助发现问题。

这个软中断的原理不是很懂,可以讲清楚点么

会不会是考虑到功耗问题
对硬件的部分不是很了解
空闲为设置为CC的话,正好是“1100 1100 1100 1100”


还有内存写的速度的问题
这样的话,是不是给内存写数据的时候会快一点……
[/Quote]
mujiok2003 2012-10-20
  • 打赏
  • 举报
回复
打一个断点就是一个软中断, 程序会在那里停下来,提示你出问题了。
order_c 2012-10-20
  • 打赏
  • 举报
回复
越界之后,方便调试。
清水即心 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:
有什么好看的。

若想研究的话,自己画个电路图,自己设置空闲位的默认值。


这是编译器有意的。
[/Quote]


嗯,这用意是什么呢?
清水即心 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
软中断:

Assembly code
int 3
的二进制刚好为CC,在debug模式可以帮助发现问题。
[/Quote]
这个软中断的原理不是很懂,可以讲清楚点么

会不会是考虑到功耗问题
对硬件的部分不是很了解
空闲为设置为CC的话,正好是“1100 1100 1100 1100”


还有内存写的速度的问题
这样的话,是不是给内存写数据的时候会快一点
mujiok2003 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
有什么好看的。

若想研究的话,自己画个电路图,自己设置空闲位的默认值。
[/Quote]

这是编译器有意的。
Binzo 2012-10-19
  • 打赏
  • 举报
回复
有什么好看的。

若想研究的话,自己画个电路图,自己设置空闲位的默认值。
mujiok2003 2012-10-19
  • 打赏
  • 举报
回复
软中断:
int 3
的二进制刚好为CC,在debug模式可以帮助发现问题。

65,182

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧