OberonCore
https://forum.oberoncore.ru/

Управление памятью на 64-битных системах
https://forum.oberoncore.ru/viewtopic.php?f=86&t=6607
Страница 1 из 2

Автор:  hothing [ Пятница, 01 Май, 2020 11:01 ]
Заголовок сообщения:  Управление памятью на 64-битных системах

Всегда ли нужны "натуральные" указатели в структурах данных? (Натуральные - имеет ту же разрядность, что и шина адреса).

Большая часть ПО построена на использовании динамической памяти и структурах с указателями, и прикладным программам не требуется вся доступная память, а только какая-то часть (и вряд ли нужно больше 4Гб адресуемой памяти). Значит можно сэкономить память используя короткие указатели и немного магии при кодо-генерации или программировании.

Использовать два разных типа "указатель" и "ссылка"? Использовать пулы/сегменты памяти? И как подсчитать стоит ли "овчинка выделки"?

NB Кстати, новый тренд в игро-строении это реализация доступа к объекту, не столько по указателю, сколько через целочисленный идентификатор ресурса.

--
Ради интереса пролистал книжку по С++ - и там это реализуется довольно понятно. А вот в Оберонах - фигушки, нужен новый язык и компилятор :)

Автор:  Info21 [ Пятница, 01 Май, 2020 14:14 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

KISS

Автор:  Илья Ермаков [ Пятница, 01 Май, 2020 14:22 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

Ну если у вас есть очень много мелких и связных объектов - и вам реально надо на них экономить...

Локализуйте задачу. Не надо ставить её "для языка и для всех подобных задач".
У вас, скорее всего, это будут объекты, инкапсулированные в чём-то.

Например, торчит наружу один большой контейнер - Carrier, у него Rider для доступа к данным, а внутри - эти миллионы малых объектов.

Ну и реализуйте их в рамках одного модуля как угодно. Сделайте выделение на массивах - и адресуйтесь по относительному смещению, ну и т.п.

Автор:  hothing [ Пятница, 01 Май, 2020 14:33 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

Info21 писал(а):
KISS

:) “Everything should be made as simple as possible, but no simpler.”

Автор:  hothing [ Пятница, 01 Май, 2020 14:43 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

Илья Ермаков писал(а):
...Сделайте выделение на массивах - и адресуйтесь по относительному смещению, ну и т.п.

Можно. А как насчет уборки мусора ("внутри", а не "снаружи")? Реализовать самому, и для каждой задачи?
Уборка мусора - не самая тривиальная задача.

Автор:  adimetrius [ Пятница, 01 Май, 2020 19:44 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

hothing писал(а):
NB Кстати, новый тренд в игро-строении это реализация доступа к объекту, не столько по указателю, сколько через целочисленный идентификатор ресурса.

А откуда у вас эта информация? Любопытно бы почитать.
Предположу, что в мире C/++, полном рисков и опасностей, такая косвенная адресация обеспечивает, кроме прочего, еще и безопасность: когда доступна адресная арифметика, лучше спрятать адреса от ненадежных программ(истов). И расплачиваться за эту косвенность приходится; и наверняка там не простой массив указателей, а какая-нибудь колллекция ;)

В мире же Оберонов пользоваться указателями - совершенно безопасно и бесплатно. Даже если передать их ненадежным программистам.
hothing писал(а):
Ради интереса пролистал книжку по С++ - и там это реализуется довольно понятно. А вот в Оберонах - фигушки, нужен новый язык и компилятор :)

В Оберонах, действительно, подход совсем другой: язык и компилятор минималистичны, просты и ясны. Поэтому можно слегка изменить для своей большой задачи компилятор. (Кстати, язык, возможно, и не придется менять под 64бит указатели).

Написание нового бэкэнда компилятора OP2, по оценкам ETH, занимало 0,5 студенто-года. Полагаю, в игровой индустрии есть такие ресурсы; только "куда ударять надо" - они не знают.

Написание нового бэкэнда gcc... я не встречал оценок трудоемкости ). Поэтому в их мире надо заранее как можно больше всунуть в язык.

Автор:  adimetrius [ Пятница, 01 Май, 2020 19:49 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

Илья Ермаков писал(а):
Сделайте выделение на массивах - и адресуйтесь по относительному смещению

Коллеги, я обнаружил, что наш местный ВУЗ, похоже, вообще перестал учить студентов делать динамические структуры данных в массивах. Типа, кому это надо, у всех есть new. А потом еще в лекции одного джависта услыхал, что массивы - это legacy: знать, конечно, надо про них, но пользоваться в новом коде - не.

Подскажите, в других вузах такая же ситуация?

Автор:  Илья Ермаков [ Пятница, 01 Май, 2020 20:06 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

hothing писал(а):
Илья Ермаков писал(а):
...Сделайте выделение на массивах - и адресуйтесь по относительному смещению, ну и т.п.

Можно. А как насчет уборки мусора ("внутри", а не "снаружи")? Реализовать самому, и для каждой задачи?
Уборка мусора - не самая тривиальная задача.


А внутри контейнера, среди этих микрообъектов такая сложная логика, что нельзя освобождать явно? Нет простой логики владения?

Сборка мусора обязательна в двух ситуациях:
1) В расширяемой системе, где между компонентами гуляют объекты - и явно контролировать владение, его передачу и т.п. очень сложно (что пробует делать Rust, но статически с глобальным анализом, а не для расширяемых систем. (Читаем классические обоснования у Шиперского в EthOS).
2) Всюду :) То есть, решающий свою задачу программист не должен думать об освобождении памяти, иначе будет какой-то процент ошибок, и система будет ненадёжной не на логическом уровне, а на уровне недетерминированного повреждения памяти.

А где можно без сборки мусора:
Когда вы пишите замкнутый компонент, с внутренними объектами, с ограниченной логикой, которую можете спокойно верифицировать. А потом уже 1000 раз безопасно использовать 1 раз написанное.

Автор:  Илья Ермаков [ Пятница, 01 Май, 2020 20:09 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

Кстати, для таких случаев, когда нужно поработать с объектами на своём управлении памятью в обход GC, но используя ООП (а таких примеров придумать запросто - какие-то деревья с разнотипными листьями, у которых методы и по которым можно делать WITH):

- в КП/ББ есть POINTER [untagged] TO RECORD.
Это не то же самое, что POINTER TO RECORD [untagged].
Во втором случае базовый тип - внеязыковый, без тега, его нельзя расширять, привязывать методы, передавать полиморфно через параметры.

А POINTER [untagged] - это нетрассируемый GC указатель. То есть, выделять своим образом какие-то полноценные типы КП - и не драться с GC - очень просто.

Автор:  Info21 [ Суббота, 02 Май, 2020 14:02 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

hothing писал(а):
Info21 писал(а):
KISS

:) “Everything should be made as simple as possible, but no simpler.”

Ну да: каждый мнит себя Эйнштейном.

Автор:  Artyemov [ Воскресенье, 03 Май, 2020 23:11 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

Цитата:
...(и вряд ли нужно больше 4Гб адресуемой памяти).

0.5ГБ нынче "ни о чём" и мне одному напомнило: "640 kB is enough"?
Любезный hothing, вы не представляете, что с "контупером" делает RAM-диск в пару десятков ГБ.

Автор:  Comdiv [ Понедельник, 04 Май, 2020 11:15 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

Простота оправдывает себя https://www.opennet.ru/opennews/art.shtml?num=52442
Цитата:
Исследователи также обратили внимание на упрощение создания эксплоитов из-за включения в Chrome 80 механизма упаковки указателей (вместо полного 64-разрядного значения хранятся только уникальные нижние биты указателя, что позволяет значительно сократить потребление памяти в куче). Например, некоторые находящиеся в начале кучи структуры данных, такие как таблица встроенных функций, объекты "native context" и корневые объекты сборщика мусора, теперь размещаются по предсказуемым и доступным на запись упакованным адресам.

Автор:  hothing [ Понедельник, 04 Май, 2020 19:19 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

Artyemov писал(а):
0.5ГБ нынче "ни о чём" и мне одному напомнило: "640 kB is enough"?

И? Тема больше философская. Мой личный взгляд - ограничения нужны.

Artyemov писал(а):
Любезный hothing, вы не представляете, что с "контупером" делает RAM-диск в пару десятков ГБ.
Откуда у Вас такая уверенность? Вот такой зверек у меня был дома (48Gb).

Автор:  hothing [ Понедельник, 04 Май, 2020 19:58 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

Comdiv писал(а):
Простота оправдывает себя https://www.opennet.ru/opennews/art.shtml?num=52442
Цитата:
Исследователи также обратили внимание на упрощение создания эксплоитов из-за включения в Chrome 80 механизма упаковки указателей (вместо полного 64-разрядного значения хранятся только уникальные нижние биты указателя, что позволяет значительно сократить потребление памяти в куче). Например, некоторые находящиеся в начале кучи структуры данных, такие как таблица встроенных функций, объекты "native context" и корневые объекты сборщика мусора, теперь размещаются по предсказуемым и доступным на запись упакованным адресам.

Спасибо, дважды!

ИЗМ Все таки ребята молодцы и измерили эффект от сокращения размера указателей - 40% что весьма существенно.
https://v8.dev/blog/v8-release-80#pointer-compression
Изображение

Тема уязвимостей из-за известных адресов не нова и проблема успешно решается в OpenBSD.

Автор:  hothing [ Понедельник, 04 Май, 2020 20:32 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

adimetrius писал(а):
hothing писал(а):
NB Кстати, новый тренд в игро-строении это реализация доступа к объекту, не столько по указателю, сколько через целочисленный идентификатор ресурса.

А откуда у вас эта информация? Любопытно бы почитать.

Вообще эту идею нашел здесь https://habr.com/ru/post/473294/ (Unique id), а дальше поиск (ссылки не сохранял, уж извините)
ИЗМ https://habr.com/ru/post/343778/

Автор:  Comdiv [ Понедельник, 04 Май, 2020 22:50 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

hothing писал(а):
40% что весьма существенно
Осталось ещё понять, как этот результат перенести на задачи в которых нет ситуации, когда указатель на указателе указателем погоняет. Проще всего собрать в 32-битном режиме и использовать его как нижнюю границу. Пробовали?

hothing писал(а):
Тема уязвимостей из-за известных адресов не нова и проблема успешно решается в OpenBSD.
Скорее всего, это решение не о том.

А в целом, по личным впечатлениям OpenBSD в отношении безопасности ощущается как очередной неуловимый Джо.

Автор:  Artyemov [ Понедельник, 04 Май, 2020 23:27 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

hothing писал(а):
Artyemov писал(а):
0.5ГБ нынче "ни о чём" и мне одному напомнило: "640 kB is enough"?

И? Тема больше философская. Мой личный взгляд - ограничения нужны.

Artyemov писал(а):
Любезный hothing, вы не представляете, что с "контупером" делает RAM-диск в пару десятков ГБ.
Откуда у Вас такая уверенность? Вот такой зверек у меня был дома (48Gb).

Тем более странно, знающий "как оно может быть" и "4GB is enough".

Автор:  hothing [ Вторник, 05 Май, 2020 09:54 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

Comdiv писал(а):
Осталось ещё понять, как этот результат перенести на задачи в которых нет ситуации, когда указатель на указателе указателем погоняет.

А этот результат и не надо переносить на такие задачи. Очевидно, что там этот эффект будет около нулевым.

Comdiv писал(а):
Проще всего собрать в 32-битном режиме и использовать его как нижнюю границу. Пробовали?

Ну где-то об этом речь и идет. Что даже на 64-битных системах можно\нужно эффективно использовать 32-битный режим.

Comdiv писал(а):
А в целом, по личным впечатлениям OpenBSD в отношении безопасности ощущается как очередной неуловимый Джо.
Могу предположить что Вы и не знакомы с этой ОС (не читали ни их доки, не смотрели код и т.д.).

Автор:  Comdiv [ Вторник, 05 Май, 2020 11:28 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

hothing писал(а):
Что даже на 64-битных системах можно\нужно эффективно использовать 32-битный режим.
У меня, кстати, на примере транслятора получилось на 32-битной системе как раз на 42% меньше.

hothing писал(а):
Могу предположить что Вы и не знакомы с этой ОС (не читали ни их доки, не смотрели код и т.д.).
Читал, смотрел.

Автор:  adimetrius [ Вторник, 05 Май, 2020 12:11 ]
Заголовок сообщения:  Re: Управление памятью на 64-битных системах

hothing писал(а):
Comdiv писал(а):
Comdiv писал(а):
Проще всего собрать в 32-битном режиме и использовать его как нижнюю границу. Пробовали?

Ну где-то об этом речь и идет. Что даже на 64-битных системах можно\нужно эффективно использовать 32-битный режим.


То есть, допустим, есть у нас 64-битный компилятор КП; он генерирует нативные 64-битные инструкции. И есть у него два режима: жадный и скупой: в жадном указатели 64-битные, а в скупом - 32-битные?

И выходит, что можно по желанию одну и ту же программу скомпилировать и жадно, и скупо.

Коллеги, было бы это полезно?

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/