Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra)
@ 2014-06-02 15:47:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Нашел у себя здоровенную дыру в перформансе на С++ (gcc):
В примерно 30% времени жрала плюсовая обработка throw. Причем стек сворачивался неглубоко - десяток позиций без объектности. 20 000 исключений ужирали примерно секунду реального времени.

В принципе догадывался - но таки вляпался.

PS: Тоже самое кстати относится и к dynamic_cast - тоже дикий тормоз. Лучше через виртуальные методы кастинг делать где скорость важна.


(Добавить комментарий)


[info]potan
2014-06-02 15:50 (ссылка)
Логика на исключениях - это OCamlовская привычка?
А где dynamic_cast лучше виртуальных методов?

(Ответить) (Ветвь дискуссии)


[info]kouzdra
2014-06-02 18:51 (ссылка)
Логика на исключениях - это OCamlовская привычка?

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

А где dynamic_cast лучше виртуальных методов?

Jav-ский instanceof по крайней мере незначительно хуже, а явная проверка тэга и лучше.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]jahr
2014-06-03 07:27 (ссылка)
Существенно более старая - это вообще-то удобно бывает - протягивать состояние через цепочку вызовов и муторно и не всегда и возможно. - пальцы за такое отрубать надо, я считаю. Главное, сказали же человеку про логику на исключениях, а ему как-будто и не стыдно совсем.)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2014-06-03 10:20 (ссылка)
Абсолютно не стыдно - она часто наиболее адекватна задаче.

PS: Я собственно ее и ухеривать не стал (и не собираюсь) - именно потому что "криво будет" - просто вставит ad hoc workaround, который снизил количество бросаемых исключений.

(Ответить) (Уровень выше)


[info]potan
2014-06-03 10:59 (ссылка)
Кстати, в VisualC исключения должны быстрее работать. За счет оверхеда на вызов функции.

Чего только не придумают, что б pattern matching не использовать :-).
У Java тяжелое наследство - в первых версиях шаблонов не было. Теперь без RTTI там не все библиотеки удается использовать.
Но в плане удобства, я не представляю зачем в C++ dynamic_cast использовать, и завязаных на него библиотек не видел.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2014-06-03 11:49 (ссылка)
Затем же зачем instanceof в жабе. Для эмуляции как раз паттернматчинга в основном. Протягивать все через методы убиться можно (я собственно и заменял dynamic_cast методами вовсе не в смысле "объектной идеи" а в смысле заведения виртуального метода cast_to_TYPE

(Ответить) (Уровень выше)


[info]p_k
2014-06-02 20:30 (ссылка)
Угу. RTTI и исключения тормозят, как я понимаю из-за того, что их обработка включает сравнение строк (имен классов). И от этого никак не избавиться, поскольку throw и catch могут быть в разных compilation units.

(Ответить) (Ветвь дискуссии)


[info]kouzdra
2014-06-03 11:51 (ссылка)
Там не в именах дело - просто наворот довольно сложный - там же наследование еще (в том числе множественное потенциально), ну и exceptions же еще стек динамически сворачивают - а в С++ это автоматом означает выполнение зоопарка деструкторов (чего как раз и нет в ML и Java)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]p_k
2014-06-03 12:59 (ссылка)
Конечно, stack unwinding дает дополнительный оверхед, но это касается только исключений (да и то если были походу созданы стековые объекты). А вот dynamic_cast, пр котором тоже раскрутки не происходит, все равно медленный, и дело тут именно в строках.

(Ответить) (Уровень выше)


[info]phonomania
2014-06-02 20:31 (ссылка)
на лиспе пиши и не выебывайся.

(Ответить) (Ветвь дискуссии)


[info]potan
2014-06-03 11:00 (ссылка)
В Racket исключения тоже заметно тормозят.

(Ответить) (Уровень выше)