7. A process for a program developer to manage compile-time bounds checking of user-defined types, namely, types which are not built-in, the process comprising the following steps performed during compilation of a computer program from a source code through an intermediate language code to an executable code: obtaining the source code of the computer program; specifying a user-defined data type in the source code, wherein the user-defined data type is defined free of any multi-element array type as a constituent type; locating a memory-accessing method which is defined by the user-defined data type; annotating the memory-accessing method with an accesses-explicitly-allocated-memory annotation; annotating the source code with at least one of the following: a field-contains-bound annotation indicating that a field defined by the user-defined data type contains a bound for the memory-accessing method, a bound-getter-method annotation indicating that a bound-getting method defined by the user-defined data type returns a bound for the memory-accessing method; inserting into the intermediate language code a bounds-check representation of the user-defined-bounds check annotation; and applying an optimization which reduces duplicative bounds checking that would otherwise occur in the executable code.
20. The process of claim 7 , wherein the user-defined type corresponds to a memory-mapped buffer.