www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1996/05/08/23:47:45

From: j DOT aldrich6 AT genie DOT com
Message-Id: <199605090327.AA248672446@relay1.geis.com>
Date: Thu, 9 May 96 03:15:00 UTC 0000
To: djgpp AT delorie DOT com
Mime-Version: 1.0
Subject: Re: more sizeof questions

Reply to message 3496513    from FORTIN44 AT EELA on 05/08/96  3:45PM


>OK, I'm a bit confused..(nothing new i'm afraid)... The structure
>below was taken from the VESA 1.2 spec. sizeof(_VGAInfoBlock) should
>be 256.  DJGPP gives 260.  What's up with this.  A previous posting
>mentioned 4 byte boundaries, but 256 is divisable by 4.  Any Ideas??

The size of the whole structure may be divisible by 4, but the individual
fields also have to be word-aligned.  Read on...

>typedef unsigned char 		BYTE;
>typedef unsigned short 	WORD;
>typedef unsigned long		DWORD;

>typedef struct
>{
>    DWORD	VESASignature;			4
>    WORD	VESAVersion;				2 (+2 padding)

>    DWORD    	OEMStringPointer;		4
>    DWORD    	Capabilities; 			4
>    DWORD    	VideoModePointer;		4
>    WORD   	TotalMemory;			2 (+2 padding)
>    BYTE  		Info[236];				236
>}	_VGAInfoBlock;                             =      256 bytes   (260 with
internal padding)

Each of your 2-byte fields gets another 2 bytes of padding on it, for
a total of 260.  There IS a workaround, though, in the form of the gcc
__attribute__ ((packed)) command.  See my last post for details.

John

- Raw text -


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