Какие формы адресных пространств памяти были использованы?
Сегодня большое простое виртуальное адресное пространство является общим. Исторически сложилось, что были использованы более сложные адресные пространства, такие как пара базового адреса и смещения, пара номера сегмента и смещения, адрес слова плюс некоторый индекс для байта или другого под-объекта и т.д..
Время от времени различные ответы и комментарии утверждают, что указатели C/С++ по существу являются целыми числами. Это некорректная модель для C/С++, поскольку разнообразие адресных пространств, несомненно, является причиной некоторых правил C относительно операций указателя. Например, не определение арифметики указателя за пределами массива упрощает поддержку указателей в базовой и смещенной модели. Ограничения на преобразование указателей упрощают поддержку моделей с адресами и дополнительными данными.
Это повторяющееся утверждение мотивирует этот вопрос. Я ищу информацию о разнообразии адресных пространств, чтобы проиллюстрировать, что указатель C/С++ не обязательно является простым целым числом и что ограничения C/С++ на операции с указателями являются разумными, учитывая широкое разнообразие поддерживаемых машин.
Полезная информация может включать:
- Примеры компьютерных архитектур с различными адресными пространствами и описания этих пространств.
- Примеры различных адресных пространств, которые все еще используются в машинах, которые в настоящее время производятся.
- Ссылки на документацию или объяснение, особенно URL-адреса.
- Разработка того, как адресные пространства мотивируют правила указателей на C/С++.
Это широкий вопрос, поэтому я открыт для предложений по его управлению. Я был бы рад видеть совместное редактирование на одном общем инклюзивном ответе. Однако это может привести к тому, что репутация не будет присуждена. Я предлагаю вам много полезного вклада.