Ярлыки: Статьи официального аккаунта
Память с точки зрения пользователя
Для нас, фермеров, занимающихся кодом, память эквивалентна тому, чтобы состоять из нескольких последовательных сеток, а рисование картинки выглядит так:
Структура памяти, показанная на рисунке, состоит всего изn
Он состоит из последовательных сеток, каждая сетка может хранить один байт данных (1 байт = 8 бит). Каждая сетка имеет свой уникальный номер, называемый内存地址
. Так:
-
Если наш компьютер 32-разрядный, количество ячеек памяти, к которым теоретически можно получить доступ, составляет 2³² (то есть 4 ГБ), а соответствующий диапазон адресов памяти равен:
0 ~ 2³² - 1
. -
Если наш компьютер 64-битный, количество ячеек памяти, к которым теоретически можно получить доступ, составляет 2⁶⁴ (это очень большое число), а соответствующий диапазон адресов памяти равен:
0 ~ 2⁶⁴ - 1
.
вес байта
Мы знаем, что компьютеры используют двоичный код для представления данных, но двоичный код слишком недружелюбен к человеку, и его удобнее преобразовать в шестнадцатеричный, например, для двоичных данных, состоящих из 4 байтов ниже (слово Между разделами нет пробелов, Я просто добавил пробелы для внешнего вида):
00010010 00110100 01010110 01111000
двоичный байт00010010
Его можно преобразовать в шестнадцатеричный0x12
, двоичные байты00110100
можно преобразовать в шестнадцатеричный0x34
, двоичные байты01010110
можно преобразовать в шестнадцатеричный0x56
, двоичные байты01111000
можно преобразовать в шестнадцатеричный0x78
. Таким образом, целое число, преобразованное в шестнадцатеричные данные, равно:
0x12345678
в:
-
байт
0x12
слева, представляющий1 × 16⁷ + 2 × 16⁶
,это0x12
Вес байтов относительно велик. -
байт
0x34
представляет собой3 × 16⁵ + 4 × 16⁴
, вес этого байта равен секунде. -
за которыми следуют байты
0x56
,представляет собой5 × 16³ + 6 × 16²
, этот байт снова учитывает вес. -
байты в конце
0x78
,представляет собой7 × 16¹ + 8 × 16⁰
,это0x78
Вес байтов наименьший.
Типы языков высокого уровня
Обычно мы используем языки высокого уровня для программирования (отличные от машинного языка или языка ассемблера), и один из языков высокого уровня类型
Понятие некоторых типов данных занимает несколько последовательных ячеек памяти. Например, есть язык в языке под названиемint
тип, который должен занимать размер 4 байта. Если мы скажем, что хотим установить следующее число (шестнадцатеричное) на языке высокого уровня вint
Типы:
0x12345678
Как эти данные должны быть запихнуты в сетку памяти? Должны ли байты с большим весом размещаться в младших адресах или байты с большим весом в старших адресах? На самом деле это похоже на вопрос о том, с чего лучше чистить яйцо, с большого конца или с маленького, когда мы едим яйца, На самом деле это не отличается. Однако дяди, которые первыми разработали компьютер, не договорились заранее, что привело к следующим последствиям:
-
Некоторые люди помещают байты высокого веса в младшие адреса, и люди называют этот способ представления многобайтовых данных.
大端法
: -
Некоторые люди помещают байты с большим весом в старшие адреса, и люди называют этот способ представления многобайтовых данных.
小端法
:
Так как поначалу все плохо договорились, для многобайтовых данных на разных машинах используются разные методы представления, что сказывается на переносимости программы. Кроме того, сеть стала неотъемлемой частью современного общества, когда многобайтовые данные отправляются с машины, использующей прямой порядок байтов, на машину, использующую прямой порядок байтов, это вызывает ошибки. Поэтому дядя, который разработал сеть, предусмотрел, что когда данные передаются по сети, для передачи должен использоваться метод big-endian.Тогда для машины, использующей метод Little-Endian, потребуется много процедур, а затем перевернуть его~
Не по теме
Написание статей очень утомительно, и иногда вы чувствуете, что чтение идет очень гладко, что на самом деле является результатом бесчисленных правок за ним. Если вы думаете, что это хорошо, пожалуйста, помогите переслать его.Большое спасибо~ Вот мой публичный аккаунт "Мы все маленькие лягушки".