Если у вас есть 32-разрядные регистры, то максимальный адрес, который вы можете сохранить в одном регистре, равен 2 ^ 32-1, поэтому вы можете адресовать 2 ^ 32 блока (в современных компьютерах блоки почти всегда являются байтами).Большее число просто не подходит.
Вы можете обойти это, используя адреса памяти, которые больше, чем может вместить один регистр (и некоторые процессоры / операционные системы имеют функции для этого), но используя адреса/ указатели будут медленнее, потому что они должны работать с несколькими регистрами.
В качестве примера, предположим, что у вас есть 32-разрядные регистры, но 64-разрядные указатели и вы хотите увеличить указатель, чтобы найти следующий элемент в массивеchar
(++p
).Вместо выполнения простой инструкции приращения процессор должен будет
- увеличить младшие 32 бита;
- проверить, равен ли результат нулю (переполнение);
- также увеличивайте верхнюю половину, если произошло переполнение.
Упрощая немного, это означает, что он должен выполнить инструкцию перехода (если-то-еще), которая является одной из самых медленных и самых сложных инструкцийсовременный процессор выполняет.
(см., например, сегментация памяти x86 в Википедии для схемы многоадресной адресации, используемой в процессорах Intel.)