Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Свой менеджер памяти


Суслик ©   (2005-09-01 11:28:00) 

Добрый день.

Помню, что несколько раз такие вопросы поднимались, но что-то не могу найти.

Задача.
Есть большое количествообъектов одного класса. Полями объекта являются только простые типы (integer, double), т.е. никаких строк, интерфейсов и прочее.

Объектов много. Порядка млн. При этом они очень небольшие - от 4 до 30 байт полезной информации.

По результатам изменрений - стурктура из млн. объектов удаляется 1-2 сек.

Логичное желание оптимизировать алгоритмы создания/удаления объектов. Для этого логично использовать NewInstance и FreeInstance в сочетании с VirtualAlloc/VirtualFree.

В принципе могу и сам написать, но хотелось бы для начала изучить существующий материал.

Вопрос
Мог бы кто-нибудь поделиться наработками по заданной теме?


Digitman   (2005-09-01 13:21:00) [1]


> Суслик ©   (01.09.05 12:49) [15]


ты менеджер в составе msvctrt/msvcrXX не щупал ?

пощупай ..


КаПиБаРа   (2005-09-01 12:57:00) [2]

Суслик ©   (01.09.05 12:49) [15]
Но тут трудности с алгоритмами определения свободных ячеек


2 ссвязных списка на одну область памяти. В одном занятые ячейки в другом - свободные. Ускорение за счет того что при удалении элементапамять не освобождается, а переходит в другой список.


Суслик   (2005-09-01 12:49:00) [3]


>  [14] Digitman ©   (01.09.05 12:40)


> New/FreeInstance


можно же перекрыть? Кто мешает.

Я в общем-то это уже делал. Располагал данные в статических массивах.

Но тут трудности с алгоритмами определения свободных ячеек, которые остались после удаления объектов. Т.е. определять то несложно, как сделать, чтобы быстро работало.

Да и к тому же количество объекто неизвестно. Поэтому их нужно располагать в динамической памяти. VirtualAlloc для этого хорошо подходит.


Digitman   (2005-09-01 12:40:00) [4]


> Суслик ©   (01.09.05 12:11) [10]


потому что New/FreeInstance в конечном итоге обращаются к Get/FreeMem.

А Get/FreeMem в конечном итоге обращаются по адресам, прописанным в глобальной MemoryManager-структуре.


Игорь Шевченко   (2005-09-01 12:32:00) [5]

http://home.earthlink.net/~akonshin/delphi_ru.htm


Суслик   (2005-09-01 12:21:00) [6]


>  [11] jack128 ©   (01.09.05 12:21)
> Насколько я помню у Alex Konshin'а (с) были наработки на
> эту тему..

вот я его и жду :)


jack128   (2005-09-01 12:21:00) [7]

Насколько я помню у Alex Konshin'а (с) были наработки на эту тему..


Суслик   (2005-09-01 12:11:00) [8]


>  [9] Digitman ©   (01.09.05 12:02)


> т.е. до свидания, методы TObject.Create/Destroy

Вах! Почему. А NewInstance, FreeInstance?


Digitman   (2005-09-01 12:02:00) [9]


> Суслик ©   (01.09.05 11:58) [7]


тогда тебе придется отказаться от штатного конструирования/разрушения объектов.

т.е. до свидания, методы TObject.Create/Destroy


Digitman   (2005-09-01 12:00:00) [10]


> Суслик ©   (01.09.05 11:55) [5]


тебе придется перекроить чуть ли не всю Делфи.


Суслик   (2005-09-01 11:58:00) [11]


> представления о работе штатного менеджера имеешь ? исходники
> его изучал ?

имею, изучал.

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


Digitman   (2005-09-01 11:56:00) [12]


> нужен менеджер памяти для блоков одинаковой длины


чем же такой менеджер будет принципиально отличаться от штатного менеджера по дифолту ?

представления о работе штатного менеджера имеешь ? исходники его изучал ?


Суслик   (2005-09-01 11:55:00) [13]


> А почему в них разное количество полезной информации, если
> все они одного класса?


Просто таких классов у меня несколько. И для каждого хочется сделать сабж.
Числа я привел для примера, что значений немного.


>  [4] КаПиБаРа ©   (01.09.05 11:49)


Это то я, конечно читал. И код getmem.inc достаточно хорошо изучал.
Но думаю, что есть готовые решения именно под мою задачу.


КаПиБаРа   (2005-09-01 11:49:00) [14]

Суслик ©   (01.09.05 11:41) [2]
Наверно вы это читали, но может еще кому сгодится

http://www.rsdn.ru/article/Delphi/memmanager.xml#EFBA


begin...end   (2005-09-01 11:44:00) [15]

> Суслик ©   (01.09.05 11:28)

> При этом они очень небольшие - от 4 до 30 байт полезной
> информации.

А почему в них разное количество полезной информации, если все они одного класса?


Суслик   (2005-09-01 11:41:00) [16]


>  [1] Digitman ©   (01.09.05 11:36)

нужен менеджер памяти для блоков одинаковой длины.


Digitman   (2005-09-01 11:36:00) [17]


> оптимизировать алгоритмы создания/удаления объектов


не понял ...
к менеджменту памяти это какое имеет отношение ?

менеджер памяти заведует распределением/перераспределением/освобождением блоков памяти внезависимости от того, кто и для каких целей обращается к нему с такими запросами


Наверх

Титульная страница Поиск, карта сайта Написать письмо