На дворе 21-й век, непроизводительная реализация обработки C++ исключений на основе setjmp/longjmp уже в прошлом. Современные компиляторы, такие как gcc и clang, используют продвинутую реализацию C++ исключений, называемую zero-cost exception handling. Но насколько действительно это zero-cost? На конференции…
Продолжаем разбираться с работой GraalVM, и на этот раз у нас перевод статьи Aleksandar Prokopec «Under the hood of GraalVM JIT optimizations», изначально опубликованной в блоге на Medium. В статье есть несколько интересных ссылок, позже мы постараемся перевести и эти статьи. В прошлый раз на Medium мы рассматривали…
Давайте натрём наши болиды до блеска и посмотрим, как они входят в повороты компиляторных оптимизаций на примере использования std::array. Смогут ли они не только не уступить, но и обогнать встроенный массив? Поехали!
В C++ исключения принято считать бесплатными, пока дело не доходит до throw. Но один бросок через 128 кадров стека может обойтись в 26 микросекунд, а отсутствие noexcept — заставить std::vector копировать объекты вместо перемещения. Разбираемся на замерах и примерах кода, откуда берутся эти накладные расходы, как на них влияет многопоточность и когда исключения становятся проблемой для производительности. Разобраться в исключениях