Ограничения по адресуемости? - PullRequest
1 голос
/ 27 февраля 2011

Я читаю текст C по адресу:

https://cs.senecac.on.ca/~lczegel/BTP100/pages/content/compu.html

В разделе: Адресная память они говорят, что " Максимальный размер адресуемой первичной памяти зависит от размера адресных регистров. "

Я не понимаю, почему это так.

Может кто-нибудь дать мне четкое объяснение, пожалуйста?

Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 27 февраля 2011

Если у вас есть 32-разрядные регистры, то максимальный адрес, который вы можете сохранить в одном регистре, равен 2 ^ 32-1, поэтому вы можете адресовать 2 ^ 32 блока (в современных компьютерах блоки почти всегда являются байтами).Большее число просто не подходит.

Вы можете обойти это, используя адреса памяти, которые больше, чем может вместить один регистр (и некоторые процессоры / операционные системы имеют функции для этого), но используя адреса/ указатели будут медленнее, потому что они должны работать с несколькими регистрами.

В качестве примера, предположим, что у вас есть 32-разрядные регистры, но 64-разрядные указатели и вы хотите увеличить указатель, чтобы найти следующий элемент в массивеchar (++p).Вместо выполнения простой инструкции приращения процессор должен будет

  1. увеличить младшие 32 бита;
  2. проверить, равен ли результат нулю (переполнение);
  3. также увеличивайте верхнюю половину, если произошло переполнение.

Упрощая немного, это означает, что он должен выполнить инструкцию перехода (если-то-еще), которая является одной из самых медленных и самых сложных инструкцийсовременный процессор выполняет.

(см., например, сегментация памяти x86 в Википедии для схемы многоадресной адресации, используемой в процессорах Intel.)

2 голосов
/ 27 февраля 2011

Проще говоря: регистры адресов используются для хранения и обращения к адресам памяти;поскольку их размер и число фиксированы, существует максимальный адрес .

Очевидно, что вы не можете использовать больше памяти, чем то, что адресуется (потому что машина не знает, как обращатьсяэто), поэтому используемая память фактически ограничена максимальным адресом, который может быть выражен адресными регистрами.

2 голосов
/ 27 февраля 2011

Если у вас 1 адресный регистр, содержащий 16-битный адрес, вы можете иметь максимум 2 ^ 16 - 1 адресов.

Сколько бы ни было регистров, количество адресов, на которые они могут указывать, будет ограничено.их шириной (числом бит).

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

...