Почему размер слова часто совпадает с размером указателя?

Почему размер слова часто совпадает с размером указателя?

Указатель хранит адрес памяти, поэтому его размер равен размеру адреса памяти, который зависит от количества ячеек памяти. С другой стороны, размер слова — это самая большая единица, с которой может работать инструкция, поэтому размер ячейки памяти не имеет значения, поскольку одновременно можно собирать несколько ячеек. Так какова связь между размером слова и размером указателя?

решение1

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

Программы выполняют МНОГО арифметических действий с указателями. Индексация массива — это сложение указателей. Указатели сравниваются друг с другом. Если ваш процессор не может выполнять арифметические действия с чем-то размером с указатель, ваш адрес должен быть разделен на несколько переменных, что приводит к сегментированному или банковому адресному пространству. Этим сложно управлять, и это приводит к распространению типов, подобных указателям (ближний указатель, дальний указатель, базовый указатель). Как следствие, вы получаете дополнительные странные ограничения, такие как возможность связанных списков содержать больше элементов, чем массив.

Тем не менее, микроконтроллеры с 8-битными шинами данных и большими адресными пространствами (возможно, только для кода, а не для данных) являются обычным явлением. С другой стороны, современные универсальные процессоры с 32-битными или 64-битными указателями имеют гораздо более широкие слова данных, чем указатели (например, 512-битные слова данных в подсистеме AVX современных процессоров x86_64). Многие алгоритмы без блокировок зависят от атомарного доступа к данным, которые как минимум в два раза больше указателя.

решение2

Вкратце: Вероятно, это совпадение.

Указатель не является частью архитектуры компьютера как таковой, это функция языка программирования. Например, Windows API определяет свои собственные типы указателей и их размер. В C в Windows указатель на char ( char*) варьируется от 32 до 64 бит в зависимости от вашей версии. Размер слова может иметь мало общего с этим.

Словоочень перегруженное слово, гм, термин. В архитектуре ЦП слово может относиться к размеру инструкции, шины данных, шины памяти и т. д. ВAPI-интерфейс Windowsслово — это неподписанное короткое слово, т.е.по меньшей мере2 байта, и, таким образом, зависит от того, как реализованы шорты.

Возможно, существует корреляция между словами MS и размером слов инструкций, но я думаю, что для обсуждения этого вопроса нужен разработчик ОС, и я сомневаюсь, что это повлияет на размер указателей.

решение3

В свое время компьютерные регистры и внутренние шины перешли от 4-битных к 8-битным, затем к 16-битным, 32-битным и в настоящее время к 64-битным. Максимальное адресное пространство зависит от размера указателя (хотя некоторые ранние процессоры, например Z80A, моглистраницапамять порциями размером с указатель).

По мере того, как шины становились шире, также было желательно увеличить ОЗУ, поэтому размер указателя также увеличивался. Иногда ОС не успевала за большей шиной, напримерПри переходе с 32-разрядной версии Windows 7 на 64-разрядную максимальный объем адресуемой оперативной памяти сначала увеличился с 4 ГБ до 8 ГБ, а в более дорогих версиях — до 192 ГБ.

Таким образом, размер регистров и шины (от полубайта до байта, затем до слова, затем до DWORD в 16-битной ОС MS и т. д.) произвольно увеличивался, как и адресное пространство.Более полное объяснение можно получить у @DarkDust.

Связанный контент