Efficient detection of all pointer and array access errors
- 1 June 1994
- journal article
- Published by Association for Computing Machinery (ACM) in ACM SIGPLAN Notices
- Vol. 29 (6) , 290-301
- https://doi.org/10.1145/773473.178446
Abstract
We present a pointer and array access checking technique that provides complete error coverage through a simple set of program transformations. Our technique, based on an extended safe pointer representation, has a number of novel aspects. Foremost, it is the first technique that detects all spatial and temporal access errors. Its use is not limited by the expressiveness of the language; that is, it can be applied successfully to compiled or interpreted languages with subscripted and mutable pointers, local references, and explicit and typeless dynamic storage management, e.g., C. Because it is a source level transformation, it is amenable to both compile- and run-time optimization. Finally, its performance, even without compile-time optimization, is quite good. We implemented a prototype translator for the C language and analyzed the checking overheads of six non-trivial, pointer intensive programs. Execution overheads range from 130% to 540%; with text and data size overheads typically below 100%.This publication has 8 references indexed in Scilit:
- Space efficient conservative garbage collectionPublished by Association for Computing Machinery (ACM) ,1993
- Efficient program tracingComputer, 1993
- Adding run‐time checking to the portable C compilerSoftware: Practice and Experience, 1992
- An empirical study of the reliability of UNIX utilitiesCommunications of the ACM, 1990
- A fresh look at optimizing array bound checkingPublished by Association for Computing Machinery (ACM) ,1990
- Garbage collection in an uncooperative environmentSoftware: Practice and Experience, 1988
- Integral-C—a practical environment for C programmingPublished by Association for Computing Machinery (ACM) ,1987
- The Implementation of Run-Time Diagnostics in PascalIEEE Transactions on Software Engineering, 1980