![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
вопроса вообще 2, но про одно (и, как обыно, дурные
может кто-то поделиться инфой о падении производительности (в среднем) при использовании: 1. boost::shared_ptr 2. dynamic_cast честно говоря я и сам не до конца представляю, как это можно измерить. разве что сделать большую выборку одинаковых программ, использующих и неиспользующих их. кстати, то, что написано про boost::shared_ptr в документации (падение скорости выделения памяти), я примерно представляю. хотелось бы статистические данные |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
В сравнении с dumb-pointer? Ну, это, думаю, зависит от того, как использовать, но, в принципе, если брать асимптотические значения, то сложность у них одинаковая. В сравнении с чем?
Мне сейчас лень искать это в документации... Ссылочку не подбросишь? -------------------- 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 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
http://boost.org/libs/smart_ptr/smarttests.htm
это умное название обычных указателей? да, именно в сравнении с ними. ведь на подсчет ссылок тоже вреям тратится... (о динамик касте) гы, я ж говорил, что и сам не представляю Добавлено через 2 минуты и 41 секунду чето у меня такое ощущение сложилось , что его (dynamic_cast) использование тормозит программу. я в этом не силен... вопрос снимается как дурацкий |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Константное. Хорошо, в каких задачах тебе приходится использовать 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 |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
| Alek86 |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
если я делаю
и
то оно займет одинаковое количество тактов процессора? ЗЫ. кстати, оффтоповый, но маленький вопрос почему я не могу написать так:
??? я думал, это эквивален вызова конструктора... Добавлено через 2 минуты и 10 секунд получается я, чтобы начать пользовать динамик каст, включаю RTTI, и моя прога сразу начинает тормозить? чтоб не утомляться, от меня можно отмахнуться ссылкой на статью по этой теме Добавлено через 9 минут и 9 секунд
ну вот щас к примеру. хранится список указателей на IPart (интерфейс). У него есть 2 реализующих класса: Event и Garbage. А Event реализует еще один класс, для доступа к специальным функциям события. Вот и нужно повызывать эти специальные функции у всех немусоров в контейнере. Только не говорите, что это из-за плохого проетирования, ато придется мне специальную тему заводить с просьбой "подскажите что плохого в этом проектировании" ;) |
||||||||
|
|||||||||
| archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Так можно писать только если конструктор не explicit. Зачем это нужно - вопрос отдельной темы.
Нет. От того что RTTI просто включен тормозить ничего не будет. А вот, если часто(там где много итераций
Заводи ;). Насколько я понял задачу, 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 |
||||||
|
|||||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
По моим личным наблюдениям обычное копирование маленьких объектов (до 32 байт) происходит где-то на порядок (в ~10 раз) быстрее, чем копирование boost::shared_ptr, а dynamic_cast отрабатывает где-то на два порядка (в ~100 раз) медленнее, чем простое копирование обычного указателя. |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
UnrealMan, это не то, что я хотел, но спасибо, что поделился
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Когда ты создаешь ссылку на объект счетчик ссылок увеличивается, когда удаляешь ссылку счетчик ссылок уменьшается. При обращении через shared_ptr к объекту происходит дополнительное разименование, так как boost::shared_ptr содержит указатель на объект, который содержит счетчик ссылок, и указатель на твой объект.
Если включен RTTI то к каждому классу добавляется дополнительная информация, что приводит к увеличению расхода памяти, плюс dynamic_cast не самый быстрый оператор. Но некоторые вещи без него (dynamic_cast-a) не сделаешь. Это сообщение отредактировал(а) Lazin - 6.11.2007, 08:41 |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
А что ты хотел? Из того, что я привёл, можно сделать два вывода: 1) нет никакого смысла размещать на куче быстрокопируемые объекты и заменять их копирование копированием указателей с подсчётом ссылок только для того, чтобы таким образом пытаться повысить производительность; 2) нет смысла тыкать dynamic_cast там, где вполне подходит static_cast. Это сообщение отредактировал(а) UnrealMan - 6.11.2007, 11:35 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
хз. что-то вроде того, как Страуструп говорил, что в среднем, использование С++ тормозит программу по сравнению с С на 4%. Откуда он эту цифру взял - не ко мне вопрос |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
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% подозреваю, что и он не говорил именно так) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |