Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
Суслик ©   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
1-1125302111
highlander
2005-08-29 11:55
2005.09.25
Дерево классов в Делфи


1-1125568873
Jax
2005-09-01 14:01
2005.09.25
Поиск в строке


4-1122916656
wqer
2005-08-01 21:17
2005.09.25
Local disks


9-1117037884
Trimp
2005-05-25 20:18
2005.09.25
frustum culling, матрицы MODELVIEW и PROJECTION


14-1125751122
Скучающий
2005-09-03 16:38
2005.09.25
Муха на мониторе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский