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/ |