一些debug常用的"魔法"数值

CCCCCCCC微软C++ debugging运行时用该值标记未初始化过内存 
CDCDCDCD微软C++ debugging运行时用该值标记未初始化过内存 
FEEEFEEE微软的HeapFree函数用该值来标记被释放了的堆内存 
ABABABAB为堆分配的内存后, 微软的HeapAlloc函数用该值标记"no man's land"哨兵位. 所谓哨兵位(Guard Byte)就是所分配的内存的起始和终止地址上的内存的值.
BAADF00D微软的LocalAlloc函数用该值标记为初始化过的已分配的堆内存 
BEEFCACE微软的.NET使用该值作为resource file的magic  
DDDDDDDD微软C++ debugging 堆用该值标记被释放了的堆内存 
FDFDFDFD为堆分配内存前后, 微软C++ debugging 堆用该值标记"no man's land"哨兵位.  
   

 

上述这些值应用在微软的技术中并不是偶然的, 在Writing Solid Code中, Steve Maguire对此进行了讨论. 他给出了这些值的一些标准.

  • 这些值应该是没啥用的, 操作这些数值的算法应该是做些特殊的事情的. 比如说, 0这样的数值就不符合这一条.
  • 这些值应该可以很容易地在debugger中做为非法数值被识别出来.
  • 在没有byte alignment的机器上, 这些值应该是奇数, 所以, 间接引用这些值作为地址会引发异常.
  • 如果这些值作为代码被执行的话, 会引发一场或者引发debugger断点进入.

 

参考资料

==================

Magic number (programming)

http://en.wikipedia.org/wiki/Magic_number_%28programming%29

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值