From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,ffdd4d59cbfb4caf X-Google-Attributes: gid103376,public From: dewar@merv.cs.nyu.edu (Robert Dewar) Subject: Re: Ada 95 Numerics questions for the experts Date: 1997/08/27 Message-ID: #1/1 X-Deja-AN: 268671199 References: <3401C14B.480@gsfc.nasa.gov> <01bcb2f2$b512f700$928871a5@dhoos> Organization: New York University Newsgroups: comp.lang.ada Date: 1997-08-27T00:00:00+00:00 List-Id: David said (with nasty lines > 80 chars :-) 2. The problem with your packed array example, however, is that what you are asking the compiler to do is to force array elements which are smaller than one byte to straddle byte boundaries. No compiler likes to do this, as far as I know. (Record components straddling byte boundaries, are another matter, and they are handled quite nicely without any ugly source code). Simply using pragma Pack instead of a "for 'size use 24" clause will result in your 8-element x 3-bit array occupying 32 bits, which is not bad at all. Undoubtedly, the extra code required to mask and shift the varying amounts as a function of the array index would substantially exceed the one byte of array size saved. Besides, even if the compiler did give you your 24-bit array, it would probably skip to the next 32-bit boundary for the next object in memory, anyway. Even gnat will not give you a 24-bit array for this case (at least the WinNT version 3.09). GNAT most certainly allows elements to straddle storage boundaries, and will tightly pack any component size up to 32 bits. The following is quite acceptable to GNAT: package j is type x is range 1 .. 5; for x'size use 3; type r is array (0 .. 7) of x; pragma Pack (r); for r'size use 24; type m is array (1 .. 10) of r; pragma pack (m); for m'size use 240; end j;