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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
WinstonCherchil
 Аватар для WinstonCherchil
7 / 7 / 0
Регистрация: 20.01.2011
Сообщений: 73
#1

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

05.06.2013, 23:43. Просмотров 368. Ответов 8
Метки нет (Все метки)

Вобщем читал статейки в интернете про операцию new, утечки памяти и функци, которые возвращают массивы и всякие не однородные данные через указатель, и кто-то в коментах написал что new очень медленная.

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

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

Вобщем вопрос. Переписывать мне очередь, или это все байки что new медленный?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 23:43     Правда что new очень медленная?
Посмотрите здесь:

C++ Правда что С быстрее чем С++?
C++ Вычислить сумму знакопеременного ряда. Код есть (корявый правда)
C++ Работает,правда,в одно действие
Я очень сильно запустил свой ПК,посоветуйте что нибудь т.к. очень сильно тормозит C++
C++ Правда ли, что все цифры равны
Динамическая память(толи я дурак, то ли правда лыжи не едут) C++
C++ знаю что элементарно, но я пока не очень в с++ разбираюсь(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12520 / 7082 / 797
Регистрация: 27.09.2012
Сообщений: 17,489
Записей в блоге: 2
Завершенные тесты: 1
05.06.2013, 23:46     Правда что new очень медленная? #2
Цитата Сообщение от WinstonCherchil Посмотреть сообщение
Действительно ли это так?
Действительно. Для высокопроизводительных программ может стать критичным, ибо выделение памяти вещь медленная

Добавлено через 1 минуту
Если нужно постоянно создавать множество объектов одного типа, а потом они становятся не нужны, то можно создать пул объектов и брать их оттуда.
Как вариант выделять память сразу с запасом. Можно написать собственный аспределитель, но это может быть чревато кучей ошибок, багов и т.д.
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6227 / 3472 / 424
Регистрация: 29.11.2010
Сообщений: 9,178
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
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6227 / 3472 / 424
Регистрация: 29.11.2010
Сообщений: 9,178
06.06.2013, 00:36     Правда что new очень медленная? #6
Если хотите реализовывать свой оператор, советую почитать Скотта Мейерса, "Эффективное использование С++. 50 рекомендаций по улучшению ваших программ и проектов". Он данному вопросу уделил достаточно пристальное внимание.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12520 / 7082 / 797
Регистрация: 27.09.2012
Сообщений: 17,489
Записей в блоге: 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++
C++ Вводится 2 строки. Правда ли, что вторая строка встречается в первой как подстрока
Считая что в двух строках находятся очень длинные целые числа, сформировать третью строку - сумму этих чисел C++

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

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

Не по теме:

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

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

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