在使用无限循环的游戏或其他应用程序中,将循环包装在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
,但任何其他编译器也适用。
答案 0 :(得分:1)
好吧,将循环包装在try {} catch() {}
块中,在输入try {}
块时会给你一个小的性能命中,但不会在循环中执行单个迭代。
Vs以上。一个非包装版本,进入try { }
块需要编译器发出一些额外的指令,以便能够输入后面定义的catch() {}
块。这些附加指令与未展开的循环相比具有(非常小的)性能差异。
即使如果try {} catch() {}
将应用于循环的内部部分,安装catch() {}
块入口点的开销将仅应用一次,而不是针对单个迭代。