Открыть сервис

Big-endian

Big-endian (от англ. big — «большой» и end — «конец») — это способ записи многобайтовых или многословных данных в памяти компьютера или при передаче по сети, при котором старший (наиболее значимый) байт (или слово) располагается по наименьшему адресу или передаётся первым. Противоположным способом является little-endian, при котором первым идёт младший байт.

Происхождение термина

Термины «big-endian» и «little-endian» были введены в 1980 году Дэнни Коэном в статье «On Holy Wars and a Plea for Peace» («О священных войнах и призыве к миру»), опубликованной в журнале Computer Architecture News. Коэн использовал аллюзию на роман Джонатана Свифта «Путешествия Гулливера», где в стране лилипутов разгорелся конфликт между «остроконечниками» и «тупоконечниками» по вопросу, с какого конца разбивать варёное яйцо. В контексте вычислительной техники «big-endian» означает, что «большой конец» (старший байт) числа хранится первым.

Принцип работы

В компьютерной архитектуре данные хранятся в виде последовательности байтов. При работе с числами, размер которых превышает один байт (например, 16-битные, 32-битные или 64-битные), возникает вопрос о порядке следования байтов в памяти.

Пример для 32-битного целого числа

Рассмотрим 32-битное целое число 0x12345678 (в шестнадцатеричной системе). Оно состоит из четырёх байтов: 0x12 (старший), 0x34, 0x56, 0x78 (младший).

  • Big-endian: В памяти по возрастанию адресов байты располагаются в порядке от старшего к младшему:
  • Адрес A: 0x12
  • Адрес A+1: 0x34
  • Адрес A+2: 0x56
  • Адрес A+3: 0x78
  • Little-endian: В памяти по возрастанию адресов байты располагаются в обратном порядке — от младшего к старшему:
  • Адрес A: 0x78
  • Адрес A+1: 0x56
  • Адрес A+2: 0x34
  • Адрес A+3: 0x12

Таким образом, при big-endian порядок байтов в памяти совпадает с порядком, в котором число записывается в тексте (слева направо от старшего к младшему), что упрощает визуальное восприятие.

История и применение

Сетевой порядок байтов

В протоколах TCP/IP (Интернет) для передачи данных по сети используется big-endian, который в этом контексте называется сетевым порядком байтов (network byte order). Это было закреплено в стандартах RFC 791 и RFC 793. Причина выбора big-endian связана с историческим доминированием архитектур, использующих этот порядок, в ранних сетевых устройствах и рабочих станциях.

Архитектуры процессоров

  • Big-endian: Исторически использовался в процессорах Motorola 68000, IBM POWER, Sun SPARC, а также в некоторых моделях ARM (до ARMv3) и MIPS (настраиваемый режим). В настоящее время big-endian применяется в основном в специализированных системах, например, в некоторых микроконтроллерах и встраиваемых устройствах.
  • Little-endian: Стал доминирующим благодаря архитектуре x86 (Intel, AMD) и её производным. Также используется в большинстве современных процессоров ARM (по умолчанию), RISC-V и PowerPC (в режиме little-endian).

Файловые форматы и протоколы

Некоторые форматы данных и протоколы явно указывают порядок байтов. Например:

  • JPEG и PNG используют big-endian для заголовков и метаданных.
  • GIF использует little-endian.
  • ELF (Executable and Linkable Format) поддерживает оба порядка, определяя его в заголовке файла.
  • UTF-16 и UTF-32 могут использовать как big-endian, так и little-endian, что обозначается меткой порядка байтов (BOM) в начале файла.

Преимущества и недостатки

Преимущества big-endian

  • Читаемость: При отладке или анализе дампов памяти big-endian-данные легче интерпретировать человеку, так как порядок байтов совпадает с естественным порядком записи чисел.
  • Совместимость с сетевыми протоколами: Многие сетевые протоколы (TCP/IP) требуют big-endian, что упрощает реализацию сетевого стека на архитектурах, использующих этот порядок.
  • Сравнение строк: При сравнении строк, хранящихся в big-endian, можно использовать побайтовое сравнение, так как старший байт определяет результат.

Недостатки big-endian

  • Сложность преобразования: При обмене данными между системами с разным порядком байтов требуется преобразование, что увеличивает вычислительные затраты.
  • Неэффективность для некоторых операций: В архитектурах, где big-endian не является родным, операции с многобайтовыми данными (например, сдвиги, маскирование) могут быть менее эффективными по сравнению с little-endian.

Сравнение с little-endian

ХарактеристикаBig-endianLittle-endian
Порядок байтов в памятиСтарший байт по младшему адресуМладший байт по младшему адресу
Визуальное восприятиеЕстественное для человекаИнвертированное
Сетевой порядокИспользуется в TCP/IPНе используется
Доминирующие архитектурыMotorola, SPARC, IBM POWERx86, ARM (по умолчанию), RISC-V
Преобразование при передачеТребуется для little-endian машинТребуется для big-endian машин

Интересные факты

  • В архитектуре x86 (Intel, AMD) используется исключительно little-endian, что стало причиной того, что большинство современных компьютеров и серверов работают в этом режиме.
  • Процессоры ARM поддерживают оба порядка, но по умолчанию работают в little-endian. В ранних версиях ARM (до ARMv3) был предусмотрен только big-endian.
  • В некоторых системах, например, в PowerPC, порядок байтов может быть переключён программно, что позволяет запускать приложения, написанные для разных архитектур.
  • Термин «endianness» (порядок байтов) используется не только для байтов, но и для более крупных единиц данных, например, для слов или двойных слов.

Источники

  • Коэн, Дэнни. «On Holy Wars and a Plea for Peace». Computer Architecture News, 1980.
  • RFC 791 — Internet Protocol, 1981.
  • RFC 793 — Transmission Control Protocol, 1981.
  • Таненбаум, Эндрю. «Архитектура компьютера». 6-е издание, 2013.
  • Хеннесси, Джон Л., Паттерсон, Дэвид А. «Компьютерная архитектура: количественный подход». 5-е издание, 2012.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →