假设设置恢复点需要一定成本,那么可以优化类似这样的循环:
while (doContinue) {
try {
doSomeWork ();
}
catch (...) {}
}
转换成这样的形式:
while (doContinue) {
try {
do {
doSomeWork ();
} while (doContinue);
break;
} catch (...) {}
}
但如果平台支持零成本异常处理,这种优化就毫无意义。
有人能指出不同架构上如何实现零成本异常处理吗?是否有一种方法可以确定编译器/代码生成器可用的基础机制,以在编译时决定是否像此示例中那样进行优化。例如,如果编译器可以假设doSomeWork()
与循环相关的副作用不存在,那么它是否可以为您进行优化?