У меня есть вопрос. Я компилирую свою библиотеку с включенным профайлингом, получаю статистику и вдруг неожидано вижу там вот эти две, я даже не знаю, можно ли это назвать функциями:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls us/call us/call name
4.65 6.90 0.34 _Unwind_SjLj_Register
0.41 7.29 0.03 _Unwind_SjLj_Unregister
Я понимаю, что цифры довольно маленькие и оптимизировать в этом месте странно, но что это такое? Я это не просил, и мне интересно зачем это, и можно ли от этого избавится?
Здравствуйте, WirBi, Вы писали:
WB>Всем доброго времени суток!
WB>У меня есть вопрос. Я компилирую свою библиотеку с включенным профайлингом, получаю статистику и вдруг неожидано вижу там вот эти две, я даже не знаю, можно ли это назвать функциями:
WB>
WB>Each sample counts as 0.01 seconds.
WB> % cumulative self self total
WB> time seconds seconds calls us/call us/call name
WB> 4.65 6.90 0.34 _Unwind_SjLj_Register
WB> 0.41 7.29 0.03 _Unwind_SjLj_Unregister
WB>
WB>Я понимаю, что цифры довольно маленькие и оптимизировать в этом месте странно, но что это такое? Я это не просил, и мне интересно зачем это, и можно ли от этого избавится?
WB>Компилятор: mingw 3.4.2
WB>Я понимаю, что цифры довольно маленькие и оптимизировать в этом месте странно, но что это такое? Я это не просил, и мне интересно зачем это, и можно ли от этого избавится?
WB>Компилятор: mingw 3.4.2
1) Спроси у компилятора
2) Выключи и не используй исключения.
Здравствуйте, WirBi, Вы писали:
WB> _Unwind_SjLj_Register WB> _Unwind_SjLj_Unregister
WB>Я понимаю, что цифры довольно маленькие и оптимизировать в этом месте странно, но что это такое? Я это не просил, и мне интересно зачем это, и можно ли от этого избавится?
видимо реализация некоторых helper-функций для stack-unwinding'а при реализаций исключений методом setjmp/longjmp.
искать в ключах как это вырубить (и в гугле чем это грозит), или вообще исключения отключить
Здравствуйте, Antikrot, Вы писали:
A>Здравствуйте, WirBi, Вы писали:
WB>> _Unwind_SjLj_Register WB>> _Unwind_SjLj_Unregister
WB>>Я понимаю, что цифры довольно маленькие и оптимизировать в этом месте странно, но что это такое? Я это не просил, и мне интересно зачем это, и можно ли от этого избавится?
A>видимо реализация некоторых helper-функций для stack-unwinding'а при реализаций исключений методом setjmp/longjmp.
она самая
помнится в начале третих версий в gcc был переписан механизм обработки исключений, но глюков в ранних версиях было полно и мы делали свою сборку gcc собирая его с --enable-sjlj-exceptions (так вроде назывался ключик для ./configure)
в бинарях сгенеренных gcc 4.3.3 (думается мне и всех 4.x) таких символов не замечено
A>искать в ключах как это вырубить (и в гугле чем это грозит), или вообще исключения отключить
Здравствуйте, WirBi, Вы писали:
WB>Я понимаю, что цифры довольно маленькие и оптимизировать в этом месте странно, но что это такое?
Это регистрация/дерегистрация обработчика исключения для данного стекового фрейма.
WB>Я это не просил, и мне интересно зачем это, и можно ли от этого избавится?
Избавиться — можно запретив исключения. Опция -fno-exceptions
Или же, пересобрать GCC c поддержкой DWARF-exceptions. Правда, у этого вида исключений есть проблемы, когда исключение пересекает границы модуля.
__________
16.There is no cause so right that one cannot find a fool following it.
Здравствуйте, 0xDEADBEEF, Вы писали:
DEA>Здравствуйте, WirBi, Вы писали:
WB>>Я понимаю, что цифры довольно маленькие и оптимизировать в этом месте странно, но что это такое? DEA>Это регистрация/дерегистрация обработчика исключения для данного стекового фрейма.
WB>>Я это не просил, и мне интересно зачем это, и можно ли от этого избавится? DEA>Избавиться — можно запретив исключения. Опция -fno-exceptions DEA>Или же, пересобрать GCC c поддержкой DWARF-exceptions. Правда, у этого вида исключений есть проблемы, когда исключение пересекает границы модуля.
SJLJ or Dwarf-2 Unwinding:
As a general rule, you should choose the default SJLJ packages, unless you know you need faster exception handling and can guarantee you'll never need to unwind through non-DW2-compiled stack frames (such as a Windows callback). If you chose the DW2 packages, consider removing the "-dw2" suffix from the program names. See README-gcc-tdm.txt, included in the core package, for further notes on this topic.
Исключения Dwarf-2 не дают никакого пенальти по производительности если исключение не было фактически вызвано. Потому "faster exception handling". Проблем с броском из другой DLL-ки вроде бы уже нет, но у топикстартера древняя версия MinGW, так что там эта проблема скорее всего еще не решена. Как вариант качнуть новую верисю по приведенной мной выше ссылке. И полюбому есть проблема с броском исключеий сквозь стэк в котором есть функции, собраные с не DW2 исключениями. Например такое может быть при использовании колбэков: "unwind through non-DW2-compiled stack frames (such as a Windows callback)".