Страницы

Поиск по вопросам

суббота, 6 октября 2018 г.

Зачем нужен 0xDEADBEEF?

Я разбираюсь в программе и вижу объявление unsigned long transfer[TRANSFER_LENGTH] = { 0xDEADBEEF }; а ниже по коду for (int i = 0; i < TRANSFER_LENGTH; i++) transfer[i] = GetData(); Вот зачем присваивать transfer 0xDEADBEEF, а не взять просто 0?


Ответ

Потому что DEADBEEF прекрасно видно в hex-dump'е как осмысленная константа 0xDEADBEEF. Вот представьте себе, что Вы анализируете лог обмена и видите там 00000000. Неясно - была передача данных или нет. И что нули означают. А когда получается DEADBEEF понятно, что что-то произошло нехорошее и в каком конкретно месте нужно искать причину. Еще раз поясню, что при нормальном исполнении программы вероятностью увидеть DEADBEEF (или любую другую аналогичную) константу равна 0. А нолей в памяти бывает сколько угодно. Вот на этом игра и ведется. PS: еще обращу внимание на два момента: DEADBEEF по-английски означает 'дохлое мясо' :-) константа DEADBEEF одинаково записывается как строчка и как байты в hex-представлении

Комментариев нет:

Отправить комментарий