noexcept, разматывание стека и производительность
Следующиепроект от Скотта Мейерса новая книга C ++ 11 говорит (страница 2, строки 7-21)
Разница между раскручиванием стека вызовов и, возможно, его раскруткой оказывает удивительно большое влияние на генерацию кода. В функции noexcept оптимизаторам не нужно держать стек времени выполнения в состоянии без перемотки, если исключение будет распространяться из функции, и при этом они не должны гарантировать, что объекты в функции noexcept уничтожаются в обратном порядке конструирования, если исключение покидает функцию , В результате появляется больше возможностей для оптимизации не только в теле функции noexcept, но и в тех местах, где эта функция вызывается. Такая гибкость присутствует только для не кроме функций. В функциях со спецификациями исключений throw () этого нет, как и в функциях без спецификаций исключений вообще.
В отличие от раздела5.4
из«Технический отчет о производительности C ++» описывает «кодовый» и «табличный» способы реализации обработки исключений. В частности, показано, что метод "таблица" не имеет временных затрат, когда не генерируются исключения, а имеет только служебные места.
Мой вопрос заключается в следующем: о каких оптимизациях говорит Скотт Мейерс, когда говорит о том, что раскручивать или раскручивать? Почему эти оптимизации не применяются дляthrow()
? Относятся ли его комментарии только к методу «кода», упомянутому в ТР 2006 года?