![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свой менеджер памяти
Суслик © (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]
> оптимизировать алгоритмы создания/удаления объектов
не понял ...
к менеджменту памяти это какое имеет отношение ?
менеджер памяти заведует распределением/перераспределением/освобождением блоков памяти внезависимости от того, кто и для каких целей обращается к нему с такими запросами