2010-05-25 5 views
77

Что означает слово «мертвая говядина»? Я прочитал его из интервью. Это как-то связано с ipv6. Я полагал, что это может быть случайный шестнадцатеричный номер, используемый для примеров, например «Быстрая коричневая лиса прыгает через ленивую собаку».Что означает «мертвая говядина»?

Правильно ли я понимаю? Или это имеет более важное значение?

+49

Для меня это означает обед! – FrustratedWithFormsDesigner

+3

«DEADBEEF» восходит десятилетиями, возможно, даже до Интернета. (Я бы предположил, что я использовал его в конце 70-х в IBM.) Это просто способ отметить, что легко видно в шестнадцатеричных дампах, хранилище, которое освобождено или иным образом не будет доступно. –

+0

@HotLicks: действительно, http://www.catb.org/jargon/html/D/DEADBEEF.html –

ответ

89

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

«Мертвая говядина» является очень популярным предложением в программировании, поскольку он построен только из букв A-F, которые используются в шестнадцатеричной системе счисления. Колонны в начале и в середине предложения делают это предложение (теоретически) действительным адресом IPv6.

+37

, чтобы убедиться, что ответы все еще существуют даже после того, как связанный сайт больше не существует. Википедия всегда изменяется и/заблокировано в некоторых странах по разным причинам ([ребенок] порно/с «неправильной» истины). Поэтому лучше всего оставить свой ответ автономным и использовать ссылки для подробных ответов/цитат. Только мои два цента. – josefx

3

Люди обычно используют его для указания фиктивных значений. Я думаю, что это прежде всего использовалось до идеи указателей NULL.

+4

DEADBEEF обычно используется для обозначения освобожденной памяти, поэтому было бы очевидно, когда у вас был оборванный указатель IIRC. – Chuck

2

Это магическое число, которое используется в различных местах, так как это также случается быть читаемым на английском языке, что делает его выделиться. Есть неполный список на Wikipedia.

40

Это выраженное выражение, использующее только буквы A-F, часто используемые, когда требуется распознаваемое шестнадцатеричное число. Некоторые системы используют его для различных целей, таких как показ памяти, которая была освобождена и не должна упоминаться снова. В отладчике это значение может быть признаком того, что вы сделали ошибку. От Wikipedia:

0xDEADBEEF ("мертвая говядина") используется IBM RS/6000, Mac OS на 32-разрядных процессоров PowerPC и Commodore Amiga в качестве магического значения отладки. В Solaris Solar Microsystems он отмечает освобожденную память ядра. В OpenVMS, работающем на Alpha-процессорах, DEAD_BEEF можно увидеть, нажав CTRL-T.

Число 0xDEADBEEF равно менее узнаваемому десятичному номеру 3735928559 (без знака) или -559038737 (подписано).

+19

, но как насчет 55378008 с ног на голову? (без знака) – mVChr

1

Он использовался как шаблон для хранения в памяти как серии шестнадцатеричных байтов (0xde, 0xad, 0xbe, 0xef). Вы могли видеть, если память была повреждена из-за сбоя оборудования, переполнения буфера и т.д.

-2

0xDEADBEEF обычно заполняется в массивах памяти, так что любое исключение, когда ошибочно указали или знать буфер над пробегов и т.д.,

+0

Этот взгляд далек от представления, которое каждый мог ожидать, что он не имеет проблемы и может быть прав, но без доказательств делает его невероятным. – shalomb

25

Значение 0xDEADBEEF имеет три практических преимущества, в основном для старых систем. Старый ассемблер/C-хаки, как и я, использовал бы его для заполнения нераспределенной памяти, чтобы уладить проблемы с памятью. Кроме того, это каламбур сленгового термина «мертвое мясо». Программист - это мертвое мясо, если DEADBEEF завершается в своих указателях. Я поздравляю парня, который сначала подумал об использовании ценности DEADBEEF. Это умно по-разному.

По практическим соображениям, во-первых, это более заметно в дампе с шестнадцатеричной памятью, потому что на самом деле он произносит слова в отличие от случайных шестнадцатеричных значений.

Во-вторых, если значение набирает указатель, это скорее вызовет ошибку памяти вне диапазона.Адрес DEADBEEF был вне диапазона адресов систем (сейчас мы говорим о системах прошлого века) независимо от того, является ли система системным.

В-третьих, это более вероятно, приведет к сбою в системах, которые требуют даже значений указателя границы для доступа к 16/32/64-битным данным. Значение имеет большую вероятность ошибки, поскольку оба из 16-битных значений (DEAD, BEEF) являются нечетными.

+0

Это один из самых интересных ответов SO, которые я прочитал за какое-то время. Спасибо, @Balita! –

11

Поскольку IPv6-Адреса записаны в Hex-нотации, вы можете использовать «Hexspeak» (цифры 0-9 и буквы a-f) в адресах.

Есть несколько слов, которые вы можете использовать в качестве действительных адресов, чтобы лучше их промотировать.

Если вы ping6 www.facebook.com -n вы получите что-то вроде "2a03: 2880: F01C: 601: лицо: b00c: 0: 1".

Вот некоторые примеры:

  • : Affe :: (Affe - Немецкий язык для мартышки - видели на ВЛС для правления)
  • : 1bad: младенец :: (один плохой младенец - видел в SMTP-приманка)
  • : BADC: ab1e :: (плохой кабель - рассматривается как подсети для незащищенного VLAN)
  • : da7a :: (Data - видно для файлсерверам)
  • : d1a1 :: (Dial - для VPN Dial-In)