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

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

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

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

05.06.2013, 23:43. Просмотров 384. Ответов 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++
Вот такая задача. найти сколько цифр в данном числе равны А. Правда ли, что все цифры в числе равны. первую часть я сделал, а вот...

Вводится 2 строки. Правда ли, что вторая строка встречается в первой как подстрока - C++
Как сделать проверку введённых символов? или может есть другой метод ? #include<iostream> using namespace std; int main() { ...

Я очень сильно запустил свой ПК,посоветуйте что нибудь т.к. очень сильно тормозит - C++
Сильно запустил свой ПК,при включении приходится ждать около часа чтобы не лагал так сильно,при переустановке Windows лагает также

знаю что элементарно, но я пока не очень в с++ разбираюсь( - C++
Даны два массива: А3х3 и В3. Определить минималь¬ные элементы в матрицах А и В (mА и mВ). Вычислить С=А*В*mА*mВ.

Нужно создать класс и то что будет его выполнять, не очень сложный - C++
(В с++ или с)

Считая что в двух строках находятся очень длинные целые числа, сформировать третью строку - сумму этих чисел - C++
Вообщем, задание вот такое: Даны две символьные строки, состоящие только из цифр (длина каждой более 10 символов). Считая, что в этих...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
05.06.2013, 23:46     Правда что new очень медленная? #2
Цитата Сообщение от WinstonCherchil Посмотреть сообщение
Действительно ли это так?
Действительно. Для высокопроизводительных программ может стать критичным, ибо выделение памяти вещь медленная

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

Выделю 1 раз память под очередь (размер определю эксперементально). Как заработает уже буду уже оптимизировать.
MrGluck
Модератор
Эксперт CЭксперт С++
7164 / 4330 / 632
Регистрация: 29.11.2010
Сообщений: 11,765
06.06.2013, 00:36     Правда что new очень медленная? #6
Если хотите реализовывать свой оператор, советую почитать Скотта Мейерса, "Эффективное использование С++. 50 рекомендаций по улучшению ваших программ и проектов". Он данному вопросу уделил достаточно пристальное внимание.
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
06.06.2013, 00:38     Правда что new очень медленная? #7
К посту 6:
В книге Солтер Н.А., Клепер С.Дж. - "C++ для профессионалов" так же освещается вопрос перегрузки new
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++
Есть код программы: #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> const int N=10;//razmer matritsi ...

Медленная реакция программы на нажатие клавиши в игре - C++
Здравствуйте! В общем пишу небольшую игру где надо перемещаться по горизонтали главным героем. Игра предполагает быстрое перемещение...

Вычислить сумму знакопеременного ряда. Код есть (корявый правда) - C++
Всем привет! Нужна ваша помощь! Парюсь с этой задачей очень долго. Задание следующее: Описать функцию S(x, е), вычисляющую значение...


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

Или воспользуйтесь поиском по форуму:
MrGluck
Модератор
Эксперт CЭксперт С++
7164 / 4330 / 632
Регистрация: 29.11.2010
Сообщений: 11,765
06.06.2013, 01:57     Правда что new очень медленная? #9
WinstonCherchil,

Не по теме:

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

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

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