Я думаю, это то, что они описывали:
У PDP-10, на который есть ссылка во втором абзаце, были 36-битные слова, и он не мог ничего адресовать внутри этих слов.Следующий текст является описанием одного способа, которым эта проблема могла быть решена, вписываясь в ограничения спецификации языка C ++ (которые включены в первый абзац).
Давайте предположим, что вы хотите сделать 9байт (по какой-то причине).По спецификации, char*
должен быть в состоянии адресовать отдельные байты.PDP-10 не может этого сделать, потому что он не может адресовать что-либо меньшее, чем 36-битное слово.
Одним из способов обойти ограничения PDP-10 было бы моделировать achar*
используя два слова памяти.Первым словом будет указатель на 36-битное слово, содержащее символ (обычно это настолько точно, насколько позволяют указатели PDP-10).Второе слово будет указывать смещение (в битах) в пределах этого слова.Теперь char*
может получить доступ к любому байту в системе и соответствует ограничениям спецификации C ++.
Визуальная помощь в стиле ASCII:
| Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 |
-------------------------------------------------------------------------
| Word 1 | Word 2 |
| (Address) | (Offset) |
-------------------------------------------------------------------------
Скажем, у вас было char*
сword1 = 0x0100
и word2 = 0x12
.Это будет указывать на 18-й бит (начало третьего байта) 256-го слова памяти.
Если этот метод действительно использовался для генерации соответствующей реализации C ++ на PDP-10, то компилятор C ++пришлось бы проделать дополнительную работу с манипулированием дополнительными битами, необходимыми для этого довольно прикольного внутреннего формата.
Весь смысл этой статьи состоит в том, чтобы проиллюстрировать, что char
не всегда 8 бит.Это по крайней мере 8 бит, но нет определенного максимума.Внутреннее представление типов данных зависит от архитектуры платформы и может отличаться от ожидаемого.