Я не понимаю, почему слово всегда содержит байты по мощности 2. Почему он не может содержать 5 байтов или 6 байтов?Почему слово в памяти всегда содержит 2^n число байтов?
ответ
Это не всегда так. В прошлом были машины с 18 бит (PDP-8) 18 бит (PDP-7) 36 бит (PDP-10) или даже 60 бит (CDC 6600)
Даже сегодня есть машины с нечетными размерами. Семейство PIC 16xxxx от Microchip хранит инструкции в 14-битных словах, в то время как серия 24xxxx использует 24-разрядные инструкции. Это, однако, специализированные встроенные чипы, а не машины общего назначения.
По большей части все перемещено в два режима. Большим толчком для этого стал старый IBM 360, в котором было введено знакомое (хотя и несколько устаревшее) 32-битное слово, содержащее 4 восьмеричных байта.
Эта комбинация мощности двух слов и мощности двух байтов на слово делает адресацию целых/указателей и символов простой и эффективной.
Современные машины просто обновили это до 64-битных слов с 8-битными байтами на слово, сохраняя это полезное преимущество.
Есть ли какой-либо из этих примеров, которые вы упоминаете, имеет адресную память? Если память адресована только по словам, то вычисления адресов никогда не должны масштабироваться по количеству бит в слове или количеству октетов в слове. (например, у машины может быть только 12-битная шина памяти?) –
Большинство машин тогда, где машины с адресами слов. PDP-10, однако, может разбить слово на 6 шестибитных «байтов» или 5 семибитных с потерянным битом или 4 восьмеричными байтами с 4 потерянными битами или 4 девятьмибайтными байтами. Специальные инструкции, которые использовали для этого, и программист должен был обрабатывать границы слов и другие проблемы с адресацией. Фактически, слово может быть подразделено на любое количество полей переменных бит, если они соответствуют 36-битовому слову. –
Хм, так что я думаю, если бы вы хотели N-го символа в строке, вам нужно было бы разделить N на не-power-of-2, чтобы получить адрес слова, в котором содержался персонаж, который вы искали:/думали, что адресно-адресная память будет в основном избегать масштабирования с помощью факторов, не имеющих силы 2, но, возможно, не для программного обеспечения, пытающегося эффективно использовать память. –
- 1. Почему моя программа содержит 1,5 ГБ памяти в массиве байтов?
- 2. C указатель всегда содержит свой собственный адрес памяти?
- 3. .NET: случайное число или количество свободных байтов в памяти?
- 4. Почему (/ 1/2) в Clojure равняется 2N?
- 5. php - почему слово округляет целое число?
- 6. Почему 0A0B0C0D - это 32-разрядное слово/число?
- 7. Почему Ruby hash имеет FixNum n до 2n + 1?
- 8. Почему текстовый файл содержит только слово «hello» 6 (а не 5) байтов?
- 9. Сколько байтов содержит строка?
- 10. Извлечение 3 байтов в число
- 11. проверить, содержит ли слово число или специальный символ
- 12. Почему (длинный) всегда округляет число вниз?
- 13. clientStream.Read возвращает неверное число байтов
- 14. Почему O (n) равно O (2n)
- 15. Почему malloc выделяет объем памяти (24 + 16n) байтов?
- 16. Преобразование массива байтов в целое число
- 17. содержит метод для списка массива байтов
- 18. Почему этот код erlang содержит столько памяти?
- 19. Почему адрес памяти массива всегда увеличивается?
- 20. fscanf переписывание следующих байтов в памяти (C)
- 21. Случайное число всегда 0
- 22. Количество байтов, написанных всегда -1
- 23. Applescript если содержит слово
- 24. Ruby regex "содержит слово"
- 25. Xpath содержит определенное слово
- 26. Как преобразовать число в слово
- 27. Объединение 4 байтов в целое число
- 28. Как запретить доступ содержит слово?
- 29. Число строк всегда 0
- 30. Если строка содержит определенное слово, скопируйте ячейку, содержащую это слово
Простота вычисления адреса, мощность 2 означает, что простого смещения битов достаточно для вычисления байтовых адресов и т. Д. –
На некоторых архитектурах, которые загружают или сохраняют размер без питания, есть несколько инструкций. например Внутренний 80-битный плавающий формат x87 может быть загружен/сохранен со специальной версией [FLD] (http://www.felixcloutier.com/x86/FLD.html) и [FSTP] (http: //www.felixcloutier. ком/x86/FST: FSTP.html). x86 - косвенные косвенные переходы в 32-битном режиме нагрузки 2 + 4 байта. Но это исключения, а не правило, по причине, о которой говорил Ису. –