delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2003/07/03/20:00:39

Message-ID: <3F04C1B6.9E036018@somewhere.nil>
Date: Fri, 04 Jul 2003 01:52:22 +0200
From: Gautier Write-only <gautier AT somewhere DOT nil>
X-Mailer: Mozilla 4.8 [en] (Windows NT 5.0; U)
X-Accept-Language: en
MIME-Version: 1.0
Newsgroups: comp.os.msdos.djgpp
Subject: Re: data alignment issue
References: <00A224F4 DOT 86EC817C DOT 6 AT st DOT fmph DOT uniba DOT sk>
NNTP-Posting-Host: 80.218.92.120
X-Trace: news.swissonline.ch 1057276351 80.218.92.120 (4 Jul 2003 01:52:31 +0200)
Lines: 47
X-Complaints-To: abuse AT swissonline DOT ch
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Viktor DOT Stujber AT st DOT fmph DOT uniba DOT sk:

> I've noticed that djgpp aligns all members of a structure to 4 bytes.

Not necessarily (see below).

> ---------------------------------------------------------------------
> | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
> ----------------------------------------------------
> | a   _   _   _   b   b   b   b   c    c    _    _ |
> ----------------------------------------------------
> 
> this is the layout of this structure in memory:
> struct {
>  BYTE a;
>  DWORD b;
>  WORD c;
> }

with Interfaces;                use Interfaces;
with Ada.Integer_Text_IO;       use Ada.Integer_Text_IO;

procedure Align is

  type r1 is record
    a: Unsigned_8;  -- 1
    b: Unsigned_32; -- 4
    c: Unsigned_16; -- 2
  end record;

  type r2 is record
    a: Unsigned_8;  -- 1
    b: Unsigned_32; -- 4
    c: Unsigned_16; -- 2
  end record;
  pragma pack(r2);

begin
  Put(r1'size/8); Put(r2'size/8);
end;

DJGPP takes 10 bytes for r1 (choice) and 7 for r2 (it must,
because of "pack").
________________________________________________________
Gautier  --  http://www.mysunrise.ch/users/gdm/gsoft.htm

NB: For a direct answer, e-mail address on the Web site!

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019