我今天有一个想法,可以通过构造一个迭代计数器来在数组上实现边界检查循环,该计数器将在最后一个增量时溢出并根据生成的溢出中断停止执行。
所以假设你有一个数组,例如int[32]
,你想迭代它。为了避免每次循环运行中的边界检查,您现在可以做的是为溢出中断注册一个中断处理程序并为该值分配一个寄存器MAX - 32
。该寄存器在每次循环迭代运行时递增,最后一次迭代运行将溢出,即触发中断处理程序。假设中断处理程序可以增加原始函数的程序计数器,这种机制可以用来避免边界检查。
所以像这样的代码
for (int i = 0; i < array.length; i++) {
// do something
}
可以像这样实现
// setup interrupt somehow
SOME_REGISTER = MAX - array.length;
while (true) {
// do something
SOME_REGISTER++;
}
我不知道这是否可行,但我听说 Java 正在做类似的事情来避免在运行时生成的代码中进行空检查。您认为这是可行的还是任何语言运行时都考虑过/尝试过?