在try-catch块中包装循环是否会导致性能问题?

Could wrapping a loop in a try-catch block cause performance problems?

本文关键字:性能 问题 是否 try-catch 包装 循环      更新时间:2023-10-16

在使用无限循环的游戏或其他应用程序中,将循环包装在try - catch块中是否会损害性能?

像这样:

auto main() -> int{
    game::init();
    try{
        while(1){
            some_func();
            some_other_func();
            if(breaking_func())
                break;
            something_that_could_throw(); // unlikely, though
            draw();
            swap_buffers();
        }
    }
    catch(const std::exception &err){
        // do error handling
    }
    game::cleanup();
}

我标记了gcc,但任何其他编译器也适用

当进入try {}块时,将循环包装在try {} catch() {}块中会给您带来很小的性能影响,但对于执行循环中的单个迭代则不会。

Vs。在非包装版本中,进入try { }块需要编译器发出一些额外的指令,以便能够进入随后定义的catch() {}块。这些额外的指令与未包装的循环相比会有(非常小的)性能差异。

即使将try {} catch() {}应用于循环的内部部分,安装catch() {}块入口点的开销将只应用一次,而不是用于单独的迭代。