Direct_IO can only be instantiated for definite types. This is a
restriction of the Ada language, which means that the records are fixed
length (the length being determined by
up to the next storage unit boundary if necessary).
The records of a Direct_IO file are simply written to the file in index sequence, with the first record starting at offset zero, and subsequent records following. There is no control information of any kind. For example, if 32-bit integers are being written, each record takes 4-bytes, so the record at index K starts at offset (K-1)*4.
There is no limit on the size of Direct_IO files, they are expanded as necessary to accommodate whatever records are written to the file.