110

“死牛肉”这个词是什么意思?我是从一个面试问题中读到的。它与ipv6有关。我想它可能是一个随机的十六进制数字,例如“快速棕色狐狸跳过懒狗”。

我的理解正确吗?还是有更重要的意义?

4

8 回答 8

123

http://en.wikipedia.org/wiki/Hexspeak
http://www.urbandictionary.com/define.php?term=dead%3Abeef

“死牛肉”在编程中是一个非常流行的句子,因为它仅由字母 af 构成,这些字母以十六进制表示法使用。句子开头和中间的冒号使该句子成为(理论上)有效的 IPv6 地址。

于 2010-05-25T18:10:10.417 回答
57

0xDEADBEEF 的值具有三个实际好处,主要针对较旧的系统。像我这样的老汇编程序/C hack 会使用它来填充未分配的内存以解决内存问题。此外,它是俚语“死肉”的双关语。如果 DEADBEEF 在他的指针中结束,程序员就是死肉。我祝贺第一个想到使用值 DEADBEEF 的人。它在很多方面都很聪明。

至于实际原因,首先,它在十六进制内存转储中更明显,因为它实际上拼写单词而不是随机十六进制值。

其次,如果值以指针形式结束,则更有可能引发内存超出范围错误。无论系统的字节序如何,DEADBEEF 的地址都超出了系统的地址范围(我们现在谈论的是上世纪的系统)。

第三,它更有可能在需要边界指针值来访问 16/32/64 位数据的系统上引发故障。该值更容易出错,因为这两个 16 位值(DEAD、BEEF)都是奇数。

于 2010-05-25T20:25:41.603 回答
52

它是仅使用字母 AF 组成的表达式,通常在需要可识别的十六进制数字时使用。一些系统将它用于各种目的,例如显示已释放且不应再次引用的内存。在调试器中出现的这个值可能表明你犯了一个错误。来自维基百科

0xDEADBEEF(“死牛肉”)被 IBM RS/6000 系统、32 位 PowerPC 处理器上的 Mac OS 和 Commodore Amiga 用作神奇的调试值。在 Sun Microsystems 的 Solaris 上,它标志着释放的内核内存。在 Alpha 处理器上运行的 OpenVMS 上,按下 CTRL-T 可以看到 DEAD_BEEF。

数字 0xDEADBEEF 等于不易识别的十进制数 3735928559(无符号)或 -559038737(有符号)。

于 2010-05-25T18:11:32.140 回答
23

由于 IPv6 地址是用十六进制表示法编写的,因此您可以在地址中使用“Hexspeak”(数字 0-9 和字母 a)。

您可以使用许多单词作为有效地址来更好地记住它们。

如果你ping6 www.facebook.com -n会得到类似“2a03:2880:f01c:601: face:b00c :0:1”的信息。

这里有些例子:

  • :affe:: (Affe - 猴子的德语 - 在管理委员会的 vlan 中看到)
  • :1bad:babe:: (一个坏宝贝 - 在 smtp-honeypot 看到)
  • :badc:ab1e:: (坏电缆 - 被视为不安全 vlan 的子网)
  • :da7a:: (数据 - 用于文件服务器)
  • :d1a1:: (拨号 - 用于 VPN 拨入)
于 2014-07-11T16:56:08.187 回答
14

它也用于调试目的。

以下是其中一些值的方便列表:

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

于 2010-05-25T18:10:44.950 回答
4

人们通常用它来表示虚拟值。我认为它主要是在 NULL 指针的想法之前使用的。

于 2010-05-25T18:09:29.157 回答
3

这是一个在各个地方使用的神奇数字,因为它也恰好可以用英文阅读,使其脱颖而出。Wikipedia上有部分列表。

于 2010-05-25T18:11:21.420 回答
2

它被用作将一系列十六进制字节(0xde、0xad、0xbe、0xef)存储在内存中的模式。您可以查看内存是否由于硬件故障、缓冲区溢出等而损坏。

于 2010-05-25T18:11:35.023 回答