Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

операторы new & delete

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Fireman
Гость





СообщениеДобавлено: Чт Ноя 28 2002 14:40    Заголовок сообщения: операторы new & delete Ответить с цитатой

Решил проверить свои алгоритмы на скорость работы - задал около миллиарда циклов и вот что обнаружил

операторы new & delete работают раз в 50 медленнее, чем извлечение значений из памяти

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



Зарегистрирован: 28.09.2002
Сообщения: 102

СообщениеДобавлено: Чт Ноя 28 2002 16:03    Заголовок сообщения: Re: Ответить с цитатой

Что за язык программирования-то?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Fireman
Гость





СообщениеДобавлено: Чт Ноя 28 2002 16:07    Заголовок сообщения: Re: Ответить с цитатой

Язык C++
Вернуться к началу
Chea
Гость





СообщениеДобавлено: Чт Ноя 28 2002 18:20    Заголовок сообщения: Re: операторы new & delete Ответить с цитатой

Возможно я ошибаюсь - давно это было но..
1. В каком-то *.h файле имеется описание new и delete через malloc и подобные функции. Следовательно использование этих функций должно ускорить работу т.к. исключит лишний вызов и ряд условий из работы.
2. Опишу как выделяется память (во всяком случае когда я занимался кодированием в плотную).
Память выделяется блоками по 16 байт (параграф). причем если просим 2 байта нам всеравно дадут 16.
Если просим больше 13 то дадут 2 параграфа
по 16 байт построенных в список. Первые 4 байта это указатель на следующий блок и только 12 байт даны для работы. Следовательно для чтения из памяти данных больше 12 байт (как и для записи) необходимо пройтись по списку, собрать из частей данные (строку например) и подать для использования. Такой же геморой и при записи. Так что я думаю можно несколько ускорить работу если стараться выделять память блоками требующими меньше обработки (например не более 12 байт) по возможности конечно. Тем более если выделение и работа с памятью используется в цикле с большим количеством итераций.

Еще раз напомню что могу ошибаться т.к. за последнее время могли и механизмы работы измениться.
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Чт Ноя 28 2002 20:02    Заголовок сообщения: Re: операторы new & delete Ответить с цитатой

Считаю, что ускорить возможно только изменением алгоритма таким образом, чтобы свести операции new/delete к минимуму. Возможные варианты:
1. если создаваемый/уничтожаемый объект имеет один и тот же размер, то реализация очевидна, то есть один раз выделить память, а потом повторно использовать ее;
2. если создаваемый/уничтожаемый объект имеет переменный размер, то просто выделять максимальный размер (рискну утверждать, что максимально возможный размер известен всегда), далее как в п. 1;
3. если создаются/уничтожаются объекты разных типов, то опять выделить один раз максимальную память, а обращаться к ней, переопределяя тип указателя (casting).
Стоит помнить, что какими бы медленными ни были операции выделения/освобождения памяти, если их количество сравнимо с количеством еще более медленных операций (например, дисковых), ускорять их нет смысла.
Вернуться к началу
Alexy



Зарегистрирован: 22.10.2003
Сообщения: 48

СообщениеДобавлено: Вс Дек 01 2002 13:53    Заголовок сообщения: Re: операторы new & delete Ответить с цитатой

Для ускорения процедур new delete можно применить
а. аллокатор - выделяет память крупными блоками для себя. Юзер же, как правило получает ptr из уже существующего блока. В среднем выигрываем в скорости, проигрываем в размерах используемой памяти.
б. идиому виртуального конструктора. В наиболее простом виде это выглядит так:
void* ::operator new (unsigned cb, void* ptr)
{
return ptr;
}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
SAV



Зарегистрирован: 22.10.2002
Сообщения: 46
Откуда: Нижний Новгород

СообщениеДобавлено: Чт Дек 05 2002 10:32    Заголовок сообщения: Я не ослышался??? Ответить с цитатой

Виртуальный конструктор????
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alexy



Зарегистрирован: 22.10.2003
Сообщения: 48

СообщениеДобавлено: Пт Дек 06 2002 23:36    Заголовок сообщения: Re: Я не ослышался??? Ответить с цитатой

Нет, не ослышался. Насколько мне известно, этот паттерн впервые предложен
Джеймсом Копленом (James Coplien). Виртуальным конструктор назван без всякой связи с виртуальными функциями. 'Виртуальность' заключается в возможности изпользования оператора new без реальной аллокации памяти.

void* operator new(unsigned cb, void* ptr)
{
return ptr;
}

// используем обычный operator new
Foo* foo1 = new Foo;


Bar* bar = new(foo1) Bar;
// operator new возращает адрес из foo1 без
// аллокации памяти
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...