Форум программистов, компьютерный форум CyberForum.ru

Правда что new очень медленная? - C++

Восстановить пароль Регистрация
 
WinstonCherchil
 Аватар для WinstonCherchil
7 / 7 / 0
Регистрация: 20.01.2011
Сообщений: 73
05.06.2013, 23:43     Правда что new очень медленная? #1
Вобщем читал статейки в интернете про операцию new, утечки памяти и функци, которые возвращают массивы и всякие не однородные данные через указатель, и кто-то в коментах написал что new очень медленная.

Действительно ли это так? Прога, которую я пишу очень активно её будет использовать. Там 1 процесс работает с несколькими сокетами, получает сообщения из них, дешифрует их, перегоняет их в различные структуры в зависимости от типа сообщения и запихивает их уже в самописную очередь, в которой как раз и используется new. Когда другой процесс из этой очереди будет забирать эту структуру для обработки он будет уже использовать delete. (Очередь оформлена в виде класса с методами push и pull)

TCP трафик будет очень интенсивный. От 1000 до "сколько сервер выжмет" сообщений в минуту на 1 сокет.

Вобщем вопрос. Переписывать мне очередь, или это все байки что new медленный?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
05.06.2013, 23:46     Правда что new очень медленная? #2
Цитата Сообщение от WinstonCherchil Посмотреть сообщение
Действительно ли это так?
Действительно. Для высокопроизводительных программ может стать критичным, ибо выделение памяти вещь медленная

Добавлено через 1 минуту
Если нужно постоянно создавать множество объектов одного типа, а потом они становятся не нужны, то можно создать пул объектов и брать их оттуда.
Как вариант выделять память сразу с запасом. Можно написать собственный аспределитель, но это может быть чревато кучей ошибок, багов и т.д.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
05.06.2013, 23:50     Правда что new очень медленная? #3
WinstonCherchil, да. Все дело в том, что new это универсальный оператор на все случаи жизни. Он выделяет память и под POD-типы и под пользовательские объекты. Это достигается благодаря записи размера блока до, либо после непосредственно самого блока. И там еще есть некие сложности при наследовании, что заставляет размер выделенной памяти разбухать. Если мы знаем размер объекта и он не изменяется, то можем написать собственную реализацию этого оператора для класса, это значительно повысит производительность. Главное, не забыть написать и парную операцию по удалению, ну и не лепить абы что, а знать как работает универсальный оператор new, какие исключения и когда кидает, вообщем задача нетривиальна.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
05.06.2013, 23:52     Правда что new очень медленная? #4
Можно написать собственный аллокатор разделив при этом понятия выделения и освобождения памяти, конструирования и разрушения объектов.
WinstonCherchil
 Аватар для WinstonCherchil
7 / 7 / 0
Регистрация: 20.01.2011
Сообщений: 73
06.06.2013, 00:34  [ТС]     Правда что new очень медленная? #5
Всем спасибо за оперативные и информативные ответы, а также зато что не придется искать батлнеки.

Выделю 1 раз память под очередь (размер определю эксперементально). Как заработает уже буду уже оптимизировать.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
06.06.2013, 00:36     Правда что new очень медленная? #6
Если хотите реализовывать свой оператор, советую почитать Скотта Мейерса, "Эффективное использование С++. 50 рекомендаций по улучшению ваших программ и проектов". Он данному вопросу уделил достаточно пристальное внимание.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
06.06.2013, 00:38     Правда что new очень медленная? #7
К посту 6:
В книге Солтер Н.А., Клепер С.Дж. - "C++ для профессионалов" так же освещается вопрос перегрузки new
WinstonCherchil
 Аватар для WinstonCherchil
7 / 7 / 0
Регистрация: 20.01.2011
Сообщений: 73
06.06.2013, 01:55  [ТС]     Правда что new очень медленная? #8
Цитата Сообщение от MrGluck Посмотреть сообщение
Если хотите реализовывать свой оператор
Врядли буду изобретать велосипед. Скорее скопипащу откуда-нибудь, или свалку на 100МБ устрою, лишь бы работало. Не то что бы я буковок боюсь, просто прога пишется в свободное время, на одном энтузиазме. И чем больше пишешь тем еще больше надо написать. А книжки на работе почитаю =)))) За них отдельное спасибо.

А! И раз уж тему создал, критические секции быстро работают? =)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 01:57     Правда что new очень медленная?
Еще ссылки по теме:

C++ знаю что элементарно, но я пока не очень в с++ разбираюсь(
Нужно создать класс и то что будет его выполнять, не очень сложный C++
C++ Странная ошибка при компиляции очень очень большой проги ,,boomerang,,

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
06.06.2013, 01:57     Правда что new очень медленная? #9
WinstonCherchil,

Не по теме:

это не велосипед

. По моему, сути написания вы так и не поняли. Но со временем осознаете.
Yandex
Объявления
06.06.2013, 01:57     Правда что new очень медленная?
Ответ Создать тему
Опции темы

Текущее время: 00:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru