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

671
radhika

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

-1
«Размер слова - самая большая единица» - это неверно. Указатель может быть 32-разрядным или 64-разрядным, все зависит от размера адреса. Инструкция может принимать, в зависимости от инструкции, различный размер байта, поэтому существует 32-битная и 64-битная инструкции. * этот комментарий был упрощен для простоты написания * Ramhound 7 лет назад 0
Пожалуйста, проверьте второй ответ http://cs.stackexchange.com/questions/48425/is-word-size-the-size-of-a-memory-location-the-size-of-the-data-bus-or- заместитель ср radhika 7 лет назад 0
@radhika Кто тебе сказал, что «Размер слова - самая большая единица»? Как насчет длинных или длинных? Если вы посмотрите на эту [таблицу] (https://en.wikipedia.org/wiki/Word_ (computer_architecture) #Table_of_word_sizes), вы удивитесь, что размер слова является наиболее ненадежными данными с точки зрения размера. Это зависит от архитектуры процессора, который он запускает Alex 7 лет назад 0
«Но этот же компьютер может работать с байтами, 16-битными словами и 32-битными длинными словами». - это утверждение правильно, другое НЕ на 100% и имеет инженера, детали имеют значение. Весь ответ, на который вы ссылались, не настолько точен, если бы я мог выпустить отрицательное голосование, я бы сказал, потому что я вижу многочисленные утверждения, которые просто неточны. ARM и x86 - это в основном мир компьютерной архитектуры, и оба, в зависимости от конкретного процессора, поддерживают переменные размеры слов. Ramhound 7 лет назад 0

3 ответа на вопрос

2
Ben Voigt

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

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

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

Размер слова - это максимальное количество битов, которое процессор может выполнять одновременно, так что это означает, что размер ALU и размер слова одинаковы, и, следовательно, размер слова определяется архитектурой, пожалуйста, исправьте меня, если я ошибаюсь. radhika 7 лет назад 0
Кроме того, если я говорю о размере регистра данных в памяти и размере шины данных, они будут одинаковыми или разными? radhika 7 лет назад 0
1
jiggunjer

TLDR: Совпадение, наверное.

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

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

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

0
DrMoishe Pippik

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

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

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

32-разрядные версии Windows могли бы обрабатывать более 4 ГБ на процесс, но в то время не было ни коммерческого оборудования, ни программного обеспечения, которое оправдывало бы затраты на разработку для этого. Linux с виртуальной нулевой стоимостью разработки могла использовать для этого почти неограниченные человеческие часы разработки. Какое отношение имеет размер реестра памяти в архитектуре ЦП к физической системной памяти? Ramhound 7 лет назад 0
Это не так: это были просто произвольные решения увеличить размер указателя, чтобы позволить увеличить объем ОЗУ. DrMoishe Pippik 7 лет назад 0
Потребность в переменных типа большего размера возникла, как вы правильно указываете, процессоры задействовали эту возможность. Без инструкций для этого они не существовали бы, так как не было бы никакого способа манипулировать ими (сложение, вычитание). Опять же, размер указателя имеет мало общего с оперативной памятью, виртуальная память и файлы подкачки решили много проблем, но обращение 2 ГБ к 128 ГБ не имело ничего общего с вводимыми инструкциями. Ваш ответ имеет потенциал, хотя Ramhound 7 лет назад 0
Вопрос был о размере * указателя *, который используется для адресации пространства памяти и почему он также увеличился при увеличении ширины регистра. Опять же, это было произвольное решение разрешить большие программы и наборы данных без подкачки страниц. DrMoishe Pippik 7 лет назад 0
Так в чем же разница между размером слова, шириной шины данных, размером указателя и шириной ячейки памяти? radhika 7 лет назад 0
Слово определяется языком программирования, другими словами, оно может быть любого размера. Шина данных определяется архитектурой процессора. Размер указателя зависит от используемого регистра адресов. Ширина используемой памяти не имеет значения, или вы используете неправильную терминологию. Ramhound 7 лет назад 0
* Указатель * является определяющим фактором, который контролирует размер адресного пространства, и обычно является фиксированным для любой ОС. (Внутренняя) ширина шины и размер регистра фиксируются ЦП и контролируют, насколько большой «кусок» данных обрабатывается в цикле ЦП. Размер переменной может быть произвольным, и в рамках программы некоторая переменная может быть одним байтом (логические значения, хотя теоретически один бит, фактически потребляют полный байт для простоты адресации. Как расточительно!), DWORD или многобайтовыми (как в плавающем номера точек). DrMoishe Pippik 7 лет назад 1
@Ramhound, я на самом деле говорил о ширине ячейки памяти, кстати, я понял все вышеперечисленные пункты, но меня немного смущает фактическая терминология, обозначающая битовый микроконтроллер. Говорят, что n бит обозначает размер ALU используется в процессоре, поэтому ширина шины данных также равна n битам, может быть она меньше или больше n битов. Также размер слова - это максимальное количество битов, которые процессор может выполнять одновременно, поэтому это означает, что ALU размер и размер слова одинаковы, и, следовательно, размер слова определяется архитектурой, пожалуйста, исправьте меня, если я ошибаюсь. radhika 7 лет назад 0
Напомним, вам нужно декодировать инструкцию, результат которой определяет, какая операция ALU выполняется. Я никогда не слышал о «ширине памяти». Результаты инструкции заносятся в один из регистров процессоров. В зависимости от инструкции будет использоваться конкретный размер регистра, поэтому, опять же, «ширина ячейки памяти» не имеет смысла или является нечетной терминологией Ramhound 7 лет назад 0
Например, процессор x86 имеет 128-битные, 256-битные и 512-битные регистры. Они могут поддерживать операции QuadWord. Все это документировано Intel. Ramhound 7 лет назад 0
Ширина ячейки памяти означает размер ячейки памяти. radhika 7 лет назад 0
Как вы сказали, что результат ALU помещается в один из регистров процессора, это означает, что размер шины данных и размер внутренних регистров должны быть одинаковыми. Это правильно? radhika 7 лет назад 0
@Ramhound, Прочитав больше дискуссий о размере слова и размере шины данных, я немного запутался в отношении универсального определения слова. Пожалуйста, объясните это кратко. Я просмотрел википедию, там написано: «Слово - это фрагмент фиксированного размера. данные обрабатываются как единое целое с помощью набора инструкций или аппаратного обеспечения процессора ". Значит ли это, что размер регистра данных в памяти и размер слова одинаковы, то есть 32-битный микроконтроллер = 32-битное слово, подходит ли эта терминология? radhika 7 лет назад 0
@radhika: Это один кандидат, но он не соблюдается повсеместно. Например, Windows typedef `WORD` является 16-разрядной, где` DWORD` означает «двойное слово», а «QWORD» означает четырехзначное слово ... и Microsoft не изобрела это имя, некоторые инструкции в x86 и другие Архитектура имеет `B`,` W`, `D` или` Q`, обозначающие ширину операции 8, 16, 32 или 64 бита. Ben Voigt 7 лет назад 0
Если я говорю о размере регистра данных в памяти и размере шины данных, будут ли они одинаковыми или разными? radhika 7 лет назад 0
@radhika Почему ты говоришь об этом. Существует конечное число регистров, их «размер» определяется тем, каким регистром они на самом деле являются. Ramhound 7 лет назад 0

Похожие вопросы