From: lutz@iks-jena.de (Lutz Donnerhacke)
Subject: Re: Size and pack
Date: Wed, 10 Oct 2001 09:27:08 +0000 (UTC)
Date: 2001-10-10T09:27:08+00:00 [thread overview]
Message-ID: <slrn9s853b.k4.lutz@taranis.iks-jena.de> (raw)
In-Reply-To: 9ff447f2.0110100005.2503bb00@posting.google.com
* Adrian Hoe wrote:
>I have the following declaration:
> type Rx_Header_Data is
> record
> Start_Byte : Character := Latin_1.STX;
> Splitter : Character;
> Command_Byte : Character;
> Pad_Byte_1 : Character;
> Pad_Byte_2 : Character;
Five Bytes so far.
> Log_Num : Interfaces.C.Long;
> End_Byte : Character := Latin_1.ETX;
> LRC : Character;
> end record;
>
>It supposed to be 11 bytes long but Rx_Header_Data'Size reports 14
>bytes. 'Size will report 11 bytes when I add the following line:
>
>pragma pack (Rx_Header_Data);
>
>I have found that Log_Num : Interfaces.C.Long takes up 7 bytes without
>pragma pack.
As expected.
>Why this happens?
Log_Num is aligned to use a single 64bit RAM access instead of bursting two
32bit accesses. Pragma Pack favors size over speed.
>Can I use representation clause instead of pragma pack?
Yes.
>If both methods work, which is the best approach and why?
Depends on your needs:
- If you only need the small size, let the compiler choose the
representation. (-gnatR shows the compilers decision)
for rx_header_data_packed use record
start_byte at 0 range 0 .. 7;
splitter at 1 range 0 .. 7;
command_byte at 2 range 0 .. 7;
pad_byte_1 at 3 range 0 .. 7;
log_num at 4 range 0 .. 31; -- Changed
pad_byte_2 at 8 range 0 .. 7; -- Changed
end_byte at 9 range 0 .. 7;
lrc at 10 range 0 .. 7;
end record;
- If you need a special layout (i.e. for interfacing),
use record representation clauses.
next prev parent reply other threads:[~2001-10-10 9:27 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-10-10 8:05 Size and pack Adrian Hoe
2001-10-10 8:59 ` Alfred Hilscher
2001-10-10 9:50 ` John McCabe
2001-10-11 6:36 ` Adrian Hoe
2001-10-11 8:55 ` John McCabe
2001-10-31 1:53 ` Robert Dewar
2001-10-31 1:50 ` Robert Dewar
2001-10-31 9:17 ` John McCabe
2001-10-31 11:58 ` Jeff Creem
2001-11-01 1:58 ` Adrian Hoe
2001-11-01 2:34 ` Jeff Creem
2001-11-01 14:58 ` Marin David Condic
2001-11-01 3:53 ` Matthew Heaney
2001-11-01 18:37 ` Jeff Creem
2001-11-02 3:39 ` Robert Dewar
2001-11-01 3:45 ` Jeffrey Carter
2001-11-01 6:00 ` Robert Dewar
2001-10-10 9:24 ` Pi
2001-10-10 9:27 ` Lutz Donnerhacke [this message]
2001-10-11 6:24 ` Adrian Hoe
2001-10-11 8:58 ` John McCabe
2001-10-11 13:20 ` Mark Johnson
2001-10-11 16:23 ` John McCabe
2001-10-11 16:00 ` Pat Rogers
2001-10-12 8:37 ` John McCabe
2001-10-28 1:30 ` Robert Dewar
2001-10-11 9:30 ` Lutz Donnerhacke
2001-10-11 10:12 ` Vincent Smeets
2001-10-11 10:19 ` Lutz Donnerhacke
2001-10-11 11:18 ` David C. Hoos, Sr.
2001-10-11 12:06 ` Lutz Donnerhacke
2001-10-11 13:49 ` Ted Dennison
2001-10-26 4:00 ` Smark
2001-10-26 6:14 ` tmoran
2001-10-26 17:51 ` Smark
2001-10-26 23:21 ` Jeffrey Carter
2001-10-26 23:39 ` tmoran
2001-10-29 1:01 ` Adrian Hoe
2001-10-29 2:21 ` tmoran
2001-10-29 10:42 ` Adrian Hoe
2001-10-29 23:15 ` tmoran
2001-10-29 9:52 ` Lutz Donnerhacke
2001-10-29 10:29 ` Larry Kilgallen
2001-10-29 10:50 ` Lutz Donnerhacke
2001-10-29 11:12 ` Larry Kilgallen
2001-10-31 2:02 ` Robert Dewar
2001-10-31 2:00 ` Robert Dewar
2001-10-31 2:51 ` Larry Kilgallen
2001-10-31 1:59 ` Robert Dewar
2001-10-31 1:57 ` Robert Dewar
2001-10-31 1:55 ` Robert Dewar
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox