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

时间:2015-07-24 16:12:26

标签: c++ gcc c++14

在使用无限循环的游戏或其他应用程序中,将循环包装在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,但任何其他编译器也适用。

1 个答案:

答案 0 :(得分:1)

好吧,将循环包装在try {} catch() {}块中,在输入try {}块时会给你一个小的性能命中,但不会在循环中执行单个迭代。

Vs以上。一个非包装版本,进入try { }块需要编译器发出一些额外的指令,以便能够输入后面定义的catch() {}块。这些附加指令与未展开的循环相比具有(非常小的)性能差异。

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