OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 13:19

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 24 Ноябрь, 2019 22:40 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
По каким критериям выбирался адрес 65536, почему тут не 0? Значение 0 означает, что система сама подбирает начальный адрес, так вызывается HeapAlloc в AllocModMem. Ненулевое значение означает просьбу выделить страницы с указанного адреса при возможности, при этом предыдущая разметка на этих страницах отменяется (https://www.gnu.org/software/libc/manua ... 002fO.html).
Код:
   PROCEDURE AllocHeapMem (size: INTEGER; VAR c: Cluster);
...
      IF size < N THEN
         adr := HeapAlloc(65536, N, prot)
      END;
      IF adr = 0 THEN
         adr := HeapAlloc(65536, size, prot);
...

   PROCEDURE HeapAlloc (adr: Libc.PtrVoid; size: INTEGER; prot: SET): Libc.PtrVoid;
      VAR x: Libc.PtrVoid;
   BEGIN
      x := Libc.mmap(adr, size, prot, Libc.MAP_PRIVATE + Libc.MAP_ANON, zerofd, 0);
      IF x = Libc.MAP_FAILED THEN
         x := Libc.NULL
      ELSE
         ASSERT(size MOD 4 = 0, 100);
         Erase(x, size DIV 4)
      END;
      RETURN x
   END HeapAlloc;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 25 Ноябрь, 2019 00:42 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Если указать 0, то BlackBox может не работать. ОС тогда выделяет память с адресами >= 80000000H (т. е. с отрацательными значениями INTEGER), и BlackBox наверное почему-то с такими адресами работает неправильно. Можно запустить какой-нибудь тест на работу сборщика мусора, например, и проверить. Поведение одинаковое и в Linux, и в OpenBSD.

Windows начинает выдавать память с адресами >0


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 25 Ноябрь, 2019 00:50 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
В AllocModMem 0, потому что с теми областями проблем нет, они могут быть любыми адресами.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 28 Ноябрь, 2019 11:59 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Вопрос подтормаживания пока сняли увеличением размера кластера с 256 кБ до 32 МБ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 29 Ноябрь, 2019 17:04 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Иван уже недавно увеличивал N в AllocHeapMem в ядре для Linux в 4 раза (с 65536 до 65536 * 4)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Ноябрь, 2019 06:06 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
32 Мб — это прямо жестко. Но для десктопного приложений, где память не жалко, вполне нормальное решение.
Мы не стали делать больше 256 кб, чтобы сохранить "вау-эффект", когда ББ показывает при запуске, что потребляет меньше МБ памяти.
Также для серверных приложений, которые запускаться баллансировщиком могут в больших количествах, не стоит 32 Мб делать...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Ноябрь, 2019 11:50 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Иван Денисов писал(а):
...Но для десктопного приложений, где память не жалко, вполне нормальное решение...

Вложение:
Снимок экрана_2019-11-30_11-42-39.png
Снимок экрана_2019-11-30_11-42-39.png [ 71.26 КБ | Просмотров: 2724 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Ноябрь, 2019 13:03 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Вот 700 кб, это отлично. Так что пусть люди под свою задачу увеличивают. 256кб по-умолчанию — вполне нормально.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Ноябрь, 2019 18:12 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Иван Денисов писал(а):
Вот 700 кб, это отлично. Так что пусть люди под свою задачу увеличивают. 256кб по-умолчанию — вполне нормально.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB