所以,我想知道在 C 中是否有一个好的标记可供选择,除了常见的0xDEADBEEF
或不太吸引人的(对于正确的代码)0x0BADA550
。
你最喜欢什么?是否有任何理由选择一个或另一个特定值?
维基百科有一整页关于这个主题;它提供了许多示例和使用它们的著名软件。
无论如何,如果你在 x86 上工作,你应该考虑遵循@torak 的建议,充满记忆的内存int 3
救了我好几次。如果你觉得有创意,你可以让它更容易识别和使用CC90CC90
,也就是交替的int 3
和nop
。
我能想到的唯一可能比美学价值更高的标记是0xCCCCCCCC
。如果由于某种错误,它被执行0xCC
转换为一条INT 3
指令。
这适用于 IA-32 和 x86-64。我不确定是否有其他架构的等价物。
好吧,我总是选择0x80000000
,0x80000001
为每个新的区域类型递增以用有符号整数来处理意外值。对于无符号类型,这些值的使用会非常大,对于有符号类型主要是负数,并且对于所做的任何减法都会突然变为正数(从而同时测试其他错误)。这有另一个巧妙的副作用,因为将设置各种 ALU 位,例如溢出,可以通过使用-ftrapv
和其他编译器标志来检测。
0xBABECAFE
, 0xBADADD00
, 0xBADBAD00
,0xFADEFADE
0xCAFEBABE
是,我理解,Java 的神奇数字。唯一让一个比另一个更好的是它不太可能出现在数据或未初始化的内存中。所以不要使用0x00000000
or all F
s.
这取决于您要标记的内容。例如,您是否需要区分已分配但未初始化的内存和已释放的内存?如果是这样,您需要为两者使用不同的标记。
每个人都有自己的喜好。如果团队中的每个人都使用不同的标记,则有助于确定错误的来源。如:
“死牛?哦,这一定来自约翰的密码。”