![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| slavindo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 29.3.2003 Репутация: нет Всего: нет |
Такой вопрос: при открытии документа у меня создаются сотни тысяч однотипных объектов (одинаковых или порождённых от общего родителя). Оптимизация этой процедуры упёрлась в тот факт, что сотни тысяч операторов new для CObjecta занимают огромное время! Не знают ли уважаемые участники конференции, как сократить это время, или может в VC++ есть возможность выделить память оптом для нескольких объектов?
|
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
Гетмем - может выделить тебе память сразу под все объекты, но он не произведет инициализацию объектов, к тамуже тебе предется еще и распределять указатели
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| Paradox |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
А зачем ты наследуешь от CObject? Может можно без этого обойтись?
-------------------- --- |
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
Это наилучший совет. -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| Fantasist |
|
||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
В принципе стандартный менеджер памяти и так выделяет память скопом, а потом ее распределяет. Так же нет никакой уверенности, что наибольшее занимаемое время приходиться на оператор new, а не на конструирование объектов. Однако же, вполне реально и самому написать менеджер памяти, и в С++ для этого возможности есть. Наиболее быстрой работа будет с памятью выделенной в стеке или же в сегменте данных, например:
Глобальная перегрузка new крайне не реккомендуется, но идея та же: выделяем память из заранее выделенного куска памяти. Конечно, надо так же позаботиться о вызове конструктора ( чаще всего это делается с помощью placement new - A* a=new (a) A;), освобождении памяти и вызове деструктора (это уже проще - деструктор вызывается как функция). -------------------- Волны гасят ветер... |
||||
|
|||||
| Paradox |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
А я вообще все эти аллоки-маллоки не люблю почему-то
-------------------- --- |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| slavindo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 29.3.2003 Репутация: нет Всего: нет |
Отмечу, что профайлер мы уже запускали, поэтому и спрашиваю я именно про оператор new. А что касается улучшения концепции программы, то заменить эти тысячи объектов на один - никак не выходит - уж больно они нужны А за ответы - спасибо! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |