delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2012/07/27/16:15:09

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
From: "Rod Pemberton" <do_not_have AT notemailnot DOT cmm>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: Upgrading from a bad C compiler
Date: Fri, 27 Jul 2012 16:09:59 -0400
Organization: Aioe.org NNTP Server
Lines: 44
Message-ID: <juuseq$j7b$1@speranza.aioe.org>
References: <17d4b525-2c31-4c20-b3c5-a7118343e9a5 AT googlegroups DOT com> <jucp01$p35$1 AT speranza DOT aioe DOT org> <b1f8c389-45f4-43e4-9056-62fc50fc9462 AT googlegroups DOT com> <juh7c1$7hk$1 AT speranza DOT aioe DOT org> <3331145d-900b-4bef-8ad0-f533f0b4a17b AT googlegroups DOT com>
NNTP-Posting-Host: CNsg4fVcCsvs3UaOgZtQCw.user.speranza.aioe.org
X-Complaints-To: abuse AT aioe DOT org
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.2001
X-Notice: Filtered by postfilter v. 0.8.2
X-Newsreader: Microsoft Outlook Express 6.00.2800.2001
X-Priority: 3
X-MSMail-Priority: Normal
Bytes: 2822
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

"RayeR" <glaux AT centrum DOT cz> wrote in message
news:3331145d-900b-4bef-8ad0-f533f0b4a17b AT googlegroups DOT com...
> RP wrote ...
...

> > I'd assume alignment would increase the physical size.  I don't
> > know if it increases sizeof()'s value though.  I would think not...
> > I would think that C should only return the total size for C elements
> > and not padding or alignment.
>
> No, sizeof() is called on a structure which is aligned by default it
> returns total size including padding bytes! Usually 8bit members are
> extended to 16bits to be placed on even address. If you need a structure
> that match exact size (e.g. reading > some header from file to struct in
> memory) use __attribute__ ((packed)). Then sizeof will return number
> that is exact sum of all members size.


I didn't know that, but I avoid sizeof().  That could've been the original
reason why...

One could definately argue C shouldn't "know" anything about the padding,
i.e., it can be argued that padding is outside of C's "sphere of knowledge".

Either way, I see sizeof() leading to problems.

There will be those who want to know the exact underlying size of the
aligned and padded struct so they can allocate space for more aligned and
padded structs correctly.

There will also be those who only want to know only the size of the struct's
C components so that when they copy the structs C elements to an array or
other object they don't have extra space included, etc.

Sizeof won't work correctly for both situations, at least not for ANSI C.
One or the other will have to do work work to get the correct "sizeof()"
value for their situation.  It will work with help from one of many possible
compiler extensions, like '#pragma pack()'...


Rod Pemberton



- Raw text -


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