Почему адреса памяти представлены шестнадцатеричными числами? - PullRequest
13 голосов
/ 16 марта 2011

Всякий раз, когда я вижу C-программы, которые ссылаются непосредственно на определенное место в памяти (например, барьер памяти), это делается с шестнадцатеричными числами, также в окнах, когда вы получаете segfualt, он представляет память, сегментированную шестнадцатеричным числом.
Например: *(0x12DF)
Мне интересно, почему адреса памяти представлены шестнадцатеричными числами?
Есть ли для этого особая причина или это просто соглашение?

Ответы [ 5 ]

21 голосов
/ 16 марта 2011

Память часто манипулируется в терминах больших единиц, таких как страницы или сегменты, которые, как правило, имеют размеры, равные степеням 2. Поэтому, если адреса выражаются в шестнадцатеричном формате, их гораздо проще читать как страница + смещение или подобноестроит.Десятичная сложность из-за этого надоедливого фактора 5, а двоичные адреса слишком длинные, чтобы их было легко прочитать.

8 голосов
/ 16 марта 2011

Это гораздо более короткий способ представления того, что иначе было бы записано в двоичном виде.Это также очень приятно и легко конвертировать шестнадцатеричный в двоичный и обратно.Каждые 4 цифры двоичного кода соответствуют одной цифре шестнадцатеричного числа.

6 голосов
/ 16 марта 2011

Согласие и удобство: шестнадцатеричный код более четко показывает, как различные указатели имеют отношение к сегментированию. (Например, разделяемые библиотеки обычно загружаются на четных шестнадцатеричных границах, а сегмент данных также находится на четной границе.) Соглашение миникомпьютера DEC фактически предпочло восьмеричное, но шестнадцатеричное предпочтение IBM на практике победило.

(Что касается того, почему это важно: что легче запомнить, 0xb73eb000 или 3074338816? Это адрес одного из общих объектов в моей текущей оболочке на jinx.)

1 голос
/ 16 марта 2011

Это самый короткий, распространенный формат чисел, поэтому цифры не занимают много места, и все знают, что они значат.

0 голосов
/ 25 марта 2015

Компьютер понимает только двоичный язык, который представляет собой набор из 0 и 1. Это означает, что вкл / выкл. Как и в случае читабельности человека, двоичное число, которое может представлять некоторый адрес или данные, должно быть преобразовано в читаемый человеком формат. Шестнадцатеричный является одним из них. Но вопрос может заключаться в том, почему мы преобразовали двоичный код в HEX, а не в десятичный, восьмеричный и т. Д. Ответ: HEX - это тот, который можно легко преобразовать с наименьшими затратами как на HW, так и на SW. Вот почему мы используем адреса в качестве HEX. Но внутри они используются только как двоичные файлы.

Надеюсь, это поможет:)

...