[fpc-pascal] alignment of records

Jonas Maebe jonas.maebe at elis.ugent.be
Fri Aug 7 07:14:36 CEST 2015


Xiangrong Fang wrote:

> program test;
> {$mode objfpc}{$PACKRECORDS C}
> type
>    ifmap = record
>      mem_start: dword;
>      mem_end: dword;
>      base_addr: word;
>      irq: byte;
>      dma: byte;
>      port: byte;
>    end;
> begin
>    WriteLn('ifmap=', SizeOf(ifmap));
> end.
>
> The C struct's size is 24, but pascal record is 16.    The ifmap struct
> is defined as:
>
> struct ifmap {
>      unsigned long mem_start;
>      unsigned long mem_end;
>      unsigned short base_addr;
>      unsigned char irq;
>      unsigned char dma;
>      unsigned char port;
>      /* 3 bytes spare */
> };
>
> How can I instruct FPC to align records exactly same as GCC?

By using the correct types for the fields: 
http://www.freepascal.org/docs-html/rtl/ctypes/index-3.html

E.g., "unsigned long" is not (always) the same as "dword".


Jonas



More information about the fpc-pascal mailing list