A method and several variants for optimizing the detection of out of bounds
array references in computer programs are described, while preserving the
semantics of the computer program. Depending on the variant implemented,
the program is divided at run-time or compile-time into two or more
regions. The regions are differentiated by the number of checks that need
to be performed at run-time on the array accesses within the region. In
particular, some regions of the program will not need any array bounds
checks performed at run-time, which will increase the speed at which the
computer program executes. As well, the state of program variables at the
time any out of bounds access is detected is the same as the state of the
program variables would have been had the transformation not been
performed. Moreover, the regions not needing any checks at run-time will
be known at compile-time, enabling further compiler optimizations on the
region. The variants of the method are distinguished by the number of
regions created, the number of checks needed at run-time, and the size of
the program that results from the optimization.
Um método e diversos variants para optimizing a deteção fora de referências da disposição dos limites em programas de computador são descritos, ao preservar a semântica do programa de computador. Dependendo do variant executado, o programa é dividido em run-time ou em compile-time em dois ou mais regiões. As regiões são diferenciadas pelo número das verificações que necessitam ser executadas no run-time nos acessos da disposição dentro da região. No detalhe, algumas regiões do programa não necessitarão nenhumas verificações dos limites de disposição executadas no run-time, que aumentará a velocidade em que o programa de computador executa. Também, o estado de variáveis do programa então algum fora do acesso dos limites é detectado é o mesmo como o estado das variáveis do programa seria tido a transformação executado. Além disso, as regiões que não necessitam nenhumas verificações no run-time serão sabidas em compile-time, permitindo uns optimizations mais adicionais do compilador na região. Os variants do método são distinguidos pelo número das regiões criadas, pelo número das verificações necessitadas no run-time, e pelo tamanho do programa esse resultados do optimization.