@Catmengi
Юный человек который учит язык Си.

Полезность моделей памяти которые отличный от linear?

Перейдем к сути вопроса,однажды мне пришла идея что адрес памяти можно представить как двух-компонентный указатель типа reference:offset где reference это некое значение которое используется для идентификации кусочка памяти а offset это адрес внутри памяти reference, получается что-то похожее на массив и индекс. Мне кажется что данная модель памяти подойдет для машины заточенной под ООП (привет java) или для машины с защитой памяти так как из reference выйти не получиться,то есть мы не сможем повредить память другого reference. Выполнение кода пока что трогать не будем так как это можно решить разными способами. Собственно полезна ли данная модель памяти, допусти если для операций над памятью буду использоваться load/store а алоцирование кусочков будет проводиться чем-то похожем на new? И еще один вопрос,есть ли реализации подобной модели памяти?
  • Вопрос задан
  • 331 просмотр
Пригласить эксперта
Ответы на вопрос 4
AshBlade
@AshBlade
Просто хочу быть счастливым
Во-первых, речь идет об Адресации памяти, а не Модели памяти - это совершенно разные вещи:
- Адресация памяти - то, как мы к памяти обращаемся
- Модель памяти - какие ограничения выставляются на рантайм. Например, реордеринг операций

Не совсем понял, чем представленная модель отличается от обычной линейной. Если только тем, что указанный reference - любое число, а не просто смещение от базы, то:
- Это только лишние расходы на определение реального адреса
- Виртуальная память уже реализует такую концепцию, но более сложную - с несколькими уровнями адресации - https://www.kernel.org/doc/html/latest/mm/page_tab...

Мне кажется что данная модель памяти подойдет для машины заточенной под ООП (привет java)

Единственное преимущество - локальность (кэш хиты). Но его и самим можно добиться.
В той же самой джаве это делается через паттерн Off Heap

для машины с защитой памяти так как из reference выйти не получиться,то есть мы не сможем повредить память другого reference


См. иерархию страниц памяти. Там это уже реализовано

Собственно полезна ли данная модель памяти


Полезна, но уже устарела. Сейчас используются более продвинутые стратегии - https://ru.wikipedia.org/wiki/Адресация_памяти

если для операций над памятью буду использоваться load/store

А как иначе?

а алоцирование кусочков будет проводиться чем-то похожем на new

Любой new под капотом использует системные вызовы, которые этот самый load/store вызывают
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Любая оптимизация начинается от проблемы. Из проблем памяти я могу отметить технологический предел
на пропускную способность. (так называемая Стена Фон-Неймана). Она частично решается
кешамя для горячих участков кода но никак не решается в обобщенной постановке.

Непонятно что дает двух-трех или много-компонентный указатель если эта проблема по прежнему остается.
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Ты придумал защищённый режим x86. Селектор+смещение, да, да.
На практике ОС создавали два селектора размером со всё адресное пространство, а для реального управления использовали только страничный механизм, потому что размер таблицы селекторов был ограничен, да и просто муторная это штука. В итоге в длинном режиме (x64) остался только страничный механизм.
Ответ написан
Комментировать
@mvv-rus
Настоящий админ AD и ненастоящий программист
Идея, которая вам пришла в голову, известна давно, ее общепринятое название: "сегментная адресация памяти"
Про такую схему адресации и ее использование в ОС для защиты памяти я, к примеру, читал в книге по ОС ранних 80-х годов.
Во времена 16-битных микропроцессоров семейства x86 (8086-80286) и 16-битного ПО для них сегментная адресация памяти примнялась очень широко, сначала - потому что одного 16-битного адреса для адреса не хватало для адресации типичного объема памяти ПК, затем - и для разграничения доступа к памяти ОС и разных задач. Самое, наверное, известное ПО, использовавшее сегментную адресацию - это семейство Windows 3.x.
С появлением микропроцессоров этого семейства с 32-битной адресацией (80386 и далее), сегментная адресация была почти вытеснена линейной (т.к. разрядности адреса стало хватать для адресации всей памяти). Почти - но не совсем: в частности инфраструтура структурной обработки исключений (SEH) Windows NT использовала, а нынешних версий Windows, как ее потомков, и сейчас использует сегментный регистр FS. В частности, поэтому аппаратная поддержка этого регистра сохранилась в каком-то виде и в архитектуре x86-64, которая в целом от сегментной адресации отказалась.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы