Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.25;
Скачать: CL | DM;

Вниз

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

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

Добрый день.

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

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

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

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

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

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

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


 
Digitman ©   (2005-09-01 11:36) [1]


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


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

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


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


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

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


 
begin...end ©   (2005-09-01 11:44) [3]

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

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

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


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

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

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


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


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


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


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


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


 
Digitman ©   (2005-09-01 11:56) [6]


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


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

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


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


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

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

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


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


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


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


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


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


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

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


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


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


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

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


 
jack128 ©   (2005-09-01 12:21) [11]

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


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


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

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


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

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


 
Digitman ©   (2005-09-01 12:40) [14]


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


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

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


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


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


> New/FreeInstance


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

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

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

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


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

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


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


 
Digitman ©   (2005-09-01 13:21) [17]


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


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

пощупай ..



Страницы: 1 вся ветка

Текущий архив: 2005.09.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.055 c
2-1123906165
Ivanov
2005-08-13 08:09
2005.09.25
Использование DLL


1-1125341627
kblc
2005-08-29 22:53
2005.09.25
Docking в Delphi 2005


14-1125859719
ArtemESC
2005-09-04 22:48
2005.09.25
Что за чёрт???


14-1125230779
ArtemESC
2005-08-28 16:06
2005.09.25
"Обновления для вашего компьютера готовы"???


3-1123525974
suharew
2005-08-08 22:32
2005.09.25
Слетает база, выбор новой.