Указатель хранит адрес памяти, поэтому его размер - это размер адреса памяти, который зависит от того, в каких ячейках памяти нет. С другой стороны, размер Word - это самая большая единица, над которой может работать / работает инструкция, поэтому размер ячейки памяти не имеет значения, поскольку одновременно можно собирать несколько единиц. Так какова связь между размером слова и размером указателя?
3 ответа
Они не обязательно должны быть одинаковыми, и количество компьютерных систем, в которых они не сильно превышают число, где они находятся. Тем не менее, есть некоторые отношения между размером указателя и размером слова.
Программы делают много арифметики указателей. Подписка на массив является добавлением указателя. Указатели сравниваются друг с другом. Если ваш ЦП не может выполнять арифметику с чем-то размером с указатель, ваш адрес должен быть разделен на несколько переменных, что приводит к сегментированному или объединенному в единое целое адресному пространству. Они сложны в управлении и вызывают распространение типов, подобных указателю (ближний указатель, дальний указатель, основанный указатель). Как следствие, вы получаете дополнительные странные ограничения, такие как связанные списки, которые могут содержать больше элементов, чем массив.
Тем не менее, микроконтроллеры с 8-битными шинами данных и большими адресными пространствами (возможно, только для кода, а не данных) являются общими. В другом направлении современные процессоры общего назначения с 32-разрядными или 64-разрядными указателями имеют гораздо более широкие слова данных, чем указатели (например, 512-разрядные слова данных в подсистеме AVX современных процессоров x86_64). Многие алгоритмы без блокировок зависят от атомарного доступа к данным, размер которого как минимум вдвое больше размера указателя.
TLDR: Совпадение, наверное.
Указатель не является частью компьютерной архитектуры как таковой, это особенность языка программирования. Например, Windows API определяет свои собственные типы указателей и их размеры. В C на Windows, указатель на символ (char*
) варьируется от 32 до 64 бит в зависимости от вашей версии. Размер слова может иметь мало общего с этим.
Слово - это очень перегруженное слово, гм, термин. В архитектуре ЦП слово может относиться к размеру инструкции, шине данных, шине памяти и т.д. В Windows API слово представляет собой короткое число без знака, т.е. не менее 2 байтов, и, таким образом, зависит от того, как реализованы шорты.
Может быть корреляция между словами MS и словами размера инструкции, но я думаю, что вам понадобится разработчик ОС, чтобы обсудить это, и я сомневаюсь, что это повлияет на размер указателей.
Когда-то компьютерные регистры и внутренние шины перешли с 4-разрядных на 8-разрядные, затем на 16-разрядные, 32-разрядные и в настоящее время 64-разрядные. Максимальное адресное пространство зависит от размера указателя (хотя некоторые ранние процессоры, например, Z80A, могут разделять память на куски размером указателя).
Поскольку шины стали шире, было также желательно увеличить ОЗУ, поэтому размер указателя также увеличился. Иногда ОС не поспевала за большей шиной, хотя, например, при переходе с 32-разрядной на 64-разрядную версию Windows 7 максимальная адресуемая ОЗУ сначала перемещалась с 4 ГБ до 8 ГБ, и, наконец, 192 ГБ на высокопроизводительной версии.
Таким образом, размер регистров и шины (от полубайта до байта, затем Word, затем DWORD в MS-16-битной ОС, США) увеличился произвольно, как и адресное пространство. Более полное объяснение доступно от @DarkDust.