Можно ли выделить память под массив объектов?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Можно ли выделить память под массив объектов?

Сообщение FedeX »

...а не ссылок на обьекты!
Сабж. Есть ли в паскале способ выделить память сразу под группу обьектов? Только не старых object-ов, а именно экземпляров какого-нибудь класса унаследованного от TObject? Просто есть задача где надо будет часто выделять память под переменное количество обьектов. Если это делать через TMyClass.Create();, то это будет отнсительно медленно да и память может сильно фрагментироваться. Хотелось бы их уметь создавать пачками штук по 1000 или больше как это можно делать в сишке, а потом инициализировать и использовать по надобности или даже сразу.. К томуже обьекты маленькие и использоваться будут последовательно, возможно получиться что-то вроде оптимизации под кеш процессора..

Добавлено спустя 7 минут 28 секунд:
Ой вроде уже нашел сам наводки:
http://www.gamedev.ru/community/delphin ... /?id=75098
http://www.kbasm.com/delphi-per-class-allocator.html
буду экспериментировать...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Только путем перекрытия методов NewInstance и FreeInstance. Нечто подобное я сколхозил в модуле dom, можно взять за основу. Заметного увеличения скорости не получилось.
Кстати, менеджер памяти не такой уж тупой и сам сложит объекты почти что в массив, при условии что InstanceSize не слишком большой.
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Спасибо, понятно
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Сообщение Max Rusov »

Еще можно сделать типа кэша объектов. При FreeInstance не удалять объект а помешать в кэш, а по NewInstance брать из кэша. Дает неплохую оптимизацию в некоторых сценариях, когда очень часто создается/уничтожается небольшое количество объектов...
Ответить