Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> насколько падает производительность, при использовании shared_ptr и dyn.cast 
:(
    Опции темы
Alek86
Дата 5.11.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



вопроса вообще 2, но про одно (и, как обыно, дурные smile ):

может кто-то поделиться инфой о падении производительности (в среднем) при использовании:
1. boost::shared_ptr
2. dynamic_cast

честно говоря я и сам не до конца представляю, как это можно измерить. разве что сделать большую выборку одинаковых программ, использующих и неиспользующих их.

кстати, то, что написано про boost::shared_ptr в документации (падение скорости выделения памяти), я примерно представляю. хотелось бы статистические данные


--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 5.11.2007, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alek86 @  5.11.2007,  19:49 Найти цитируемый пост)
1. boost::shared_ptr

В сравнении с dumb-pointer? Ну, это, думаю, зависит от того, как использовать, но, в принципе, если брать асимптотические значения, то сложность у них одинаковая.


Цитата(Alek86 @  5.11.2007,  19:49 Найти цитируемый пост)
2. dynamic_cast

В сравнении с чем? smile


Цитата(Alek86 @  5.11.2007,  19:49 Найти цитируемый пост)
кстати, то, что написано про boost::shared_ptr в документации (падение скорости выделения памяти), я примерно представляю.

Мне сейчас лень искать это в документации... Ссылочку не подбросишь? smile 


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alek86
Дата 5.11.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



http://boost.org/libs/smart_ptr/smarttests.htm


Цитата(archimed7592 @  5.11.2007,  20:41 Найти цитируемый пост)
В сравнении с dumb-pointer?

это умное название обычных указателей? да, именно в сравнении с ними. ведь на подсчет ссылок тоже вреям тратится...


Цитата(archimed7592 @  5.11.2007,  20:41 Найти цитируемый пост)
В сравнении с чем? 
 (о динамик касте)

гы, я ж говорил, что и сам не представляю smile

Добавлено через 2 минуты и 41 секунду
чето у меня такое ощущение сложилось , что его (dynamic_cast) использование тормозит программу. я в этом не силен...

вопрос снимается как дурацкий smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 5.11.2007, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alek86 @  5.11.2007,  21:11 Найти цитируемый пост)
ведь на подсчет ссылок тоже вреям тратится...

Константное.

Цитата(Alek86 @  5.11.2007,  21:11 Найти цитируемый пост)
гы, я ж говорил, что и сам не представляю smile

Хорошо, в каких задачах тебе приходится использовать dynamic_cast?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Lazin
Дата 5.11.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Alek86 @  5.11.2007,  21:11 Найти цитируемый пост)
ведь на подсчет ссылок тоже вреям тратится...

только во время создания и удаления.
Цитата(Alek86 @  5.11.2007,  21:11 Найти цитируемый пост)
чето у меня такое ощущение сложилось , что его (dynamic_cast) использование тормозит программу. я в этом не силен...

не конкретно dynamic_cast а RTTI вообще
PM MAIL Skype GTalk   Вверх
Alek86
Дата 5.11.2007, 22:25 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Lazin @  5.11.2007,  22:02 Найти цитируемый пост)
только во время создания и удаления.


 smile это как?

если я делаю
Код

char* p1 = new char;
char* p2 = p1;

и
Код

boost::shared_ptr<char> p1(new char);
boost::shared_ptr<char> p2 = p1;


то оно займет одинаковое количество тактов процессора? smile 

ЗЫ. кстати, оффтоповый, но маленький вопрос
почему я не могу написать так:
Код

boost::shared_ptr<char> p1 = new char;

???
я думал, это эквивален вызова конструктора...

Добавлено через 2 минуты и 10 секунд
Цитата(Lazin @  5.11.2007,  22:02 Найти цитируемый пост)
не конкретно dynamic_cast а RTTI вообще


получается я, чтобы начать пользовать динамик каст, включаю RTTI, и моя прога сразу начинает тормозить? smile
чтоб не утомляться, от меня можно отмахнуться ссылкой на статью по этой теме smile

Добавлено через 9 минут и 9 секунд
Цитата(archimed7592 @  5.11.2007,  21:54 Найти цитируемый пост)
Хорошо, в каких задачах тебе приходится использовать dynamic_cast?


ну вот щас к примеру.
хранится список указателей на IPart (интерфейс). У него есть 2 реализующих класса: Event и Garbage. А Event реализует еще один класс, для доступа к специальным функциям события.
Вот и нужно повызывать эти специальные функции у всех немусоров в контейнере.

Только не говорите, что это из-за плохого проетирования, ато придется мне специальную тему заводить с просьбой "подскажите что плохого в этом проектировании" ;)


--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 5.11.2007, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alek86 @  5.11.2007,  22:25 Найти цитируемый пост)
ЗЫ. кстати, оффтоповый, но маленький вопрос
почему я не могу написать так:

Так можно писать только если конструктор не explicit. Зачем это нужно - вопрос отдельной темы.

Цитата(Alek86 @  5.11.2007,  22:25 Найти цитируемый пост)
получается я, чтобы начать пользовать динамик каст, включаю RTTI, и моя прога сразу начинает тормозить? smile

Нет. От того что RTTI просто включен тормозить ничего не будет. А вот, если часто(там где много итераций smile) делать dynamic_cast, то это будет медленней, чем если его не делать(а делать static_cast) smile.

Цитата(Alek86 @  5.11.2007,  22:25 Найти цитируемый пост)
Только не говорите, что это из-за плохого проетирования, ато придется мне специальную тему заводить с просьбой "подскажите что плохого в этом проектировании" ;) 

Заводи ;). Насколько я понял задачу, dynamic_cast тут не приштопай, не пришей smile.



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
UnrealMan
Дата 5.11.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Alek86 @  5.11.2007,  19:49 Найти цитируемый пост)
может кто-то поделиться инфой о падении производительности (в среднем) при использовании:
1. boost::shared_ptr
2. dynamic_cast

По моим личным наблюдениям обычное копирование маленьких объектов (до 32 байт) происходит где-то на порядок (в ~10 раз) быстрее, чем копирование boost::shared_ptr, а dynamic_cast отрабатывает где-то на два порядка (в ~100 раз) медленнее, чем простое копирование обычного указателя.

PM MAIL   Вверх
Alek86
Дата 5.11.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



UnrealMan, это не то, что я хотел, но спасибо, что поделился smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
Lazin
Дата 6.11.2007, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Lazin @  5.11.2007,  22:02 Найти цитируемый пост)
только во время создания и удаления.

Цитата(Alek86 @  5.11.2007,  22:25 Найти цитируемый пост)
smile это как?

Когда ты создаешь ссылку на объект счетчик ссылок увеличивается, когда удаляешь ссылку счетчик ссылок уменьшается. При обращении через shared_ptr к объекту происходит дополнительное разименование, так как boost::shared_ptr содержит указатель на объект, который содержит счетчик ссылок, и указатель на твой объект.

Цитата(Alek86 @  5.11.2007,  22:25 Найти цитируемый пост)
получается я, чтобы начать пользовать динамик каст, включаю RTTI, и моя прога сразу начинает тормозить?

Если включен RTTI то к каждому классу добавляется дополнительная информация, что приводит к увеличению расхода памяти, плюс dynamic_cast не самый быстрый оператор. Но некоторые вещи без него (dynamic_cast-a) не сделаешь.


Это сообщение отредактировал(а) Lazin - 6.11.2007, 08:41
PM MAIL Skype GTalk   Вверх
UnrealMan
Дата 6.11.2007, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Alek86 @  5.11.2007,  23:15 Найти цитируемый пост)
UnrealMan, это не то, что я хотел

А что ты хотел? Из того, что я привёл, можно сделать два вывода:
1) нет никакого смысла размещать на куче быстрокопируемые объекты и заменять их копирование копированием указателей с подсчётом ссылок только для того, чтобы таким образом пытаться повысить производительность;
2) нет смысла тыкать dynamic_cast там, где вполне подходит static_cast.

Это сообщение отредактировал(а) UnrealMan - 6.11.2007, 11:35
PM MAIL   Вверх
Alek86
Дата 7.11.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(UnrealMan @  6.11.2007,  11:33 Найти цитируемый пост)
А что ты хотел?


хз. что-то вроде того, как Страуструп говорил, что в среднем, использование С++ тормозит программу по сравнению с С на 4%.

Откуда он эту цифру взял - не ко мне вопрос


--------------------
user posted image    user posted image
PM MAIL   Вверх
SergeCpp
Дата 7.11.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



Цитата(Alek86 @  7.11.2007,  02:09 Найти цитируемый пост)
Страуструп говорил, что в среднем, использование С++ тормозит программу по сравнению с С на 4%

Bjarne Stroustrup: Learning Standard C++ as a New Language. C/C++ Users Journal. pp 43-54. May 1999
В этой работе много говорится о производительности C vs C++, есть различные графики, много цифр-коэффициентов

Там ускорение C++ по сравнению с C, кстати

О 4% там нету, может где в другой работе (я бы не говорил о замедлении в среднем на 4% подозреваю, что и он не говорил именно так)

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3463 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.