Re: C-Syntax fuer Bitfelder(war: Re: Sendmail + Spamassassin * Teerbox)

From: Bernd Walter <ticso(at)cicely12.cicely.de>
Date: Tue, 30 Mar 2004 10:41:11 +0200

On Tue, Mar 30, 2004 at 12:05:45PM +1000, Peter Ross wrote:
> Bernd Walter sagte:
> > Doch doch - nur musst du das in einem struct anwenden:
> > struct {
> > int a :2;
> > int b :2;
> > } foo;
> >
> > foo.a = 1;
> > foo.b = 0;
> >
> > Wobei du im Regelfall bei nur 2 bit eher unsigned int haben willst.
>
> Danke.Ich habe es gleich weitergeleitet, am Telephon meinte sie, das
> haette gestern nicht geklappt, vielleicht mag das ihr Visual-C nicht. Ich
> berichte bald;-)
>
> Ich habe mich als "Codeschwein" bei SGI beworben (da gab es vor kurzem
> Kontrakts hier in Melbourne, um ein Produkt "GPL-konform" zu machen
> ("verdaechtigen" Unix-Code auswechseln, bevor es freizugeben ist)), und
> habe genau so ein Stueck Code gesehen.
>
> Die Frage war: Wieviel Speicherplatz belegt das? Ich habe gesagt, dass es
> sich um ein Bitfeld handelt, aber ich nicht weiss, ob es
> Compiler-abhaengig ist, ob dafuer nur ein char oder, weil die Member int
> sind, auch ein int benutzt wird, oder ob das gar nicht definiert ist und
> vielleicht auch vom Compiler entsprechend Wordalignments "nach Gutduenken"
> abgelegt wird.

Viele Compiler können das nur mit einem 32 bit Wert als Basis.
MSVC++ und auch einige andere Compiler dürften in einer aktuellen
Version wohl auch mehr machen, aber alles was über 32 bit hinausgeht
ist wohl nicht mehr portable.
Da es eine Structure ist spielt aber auch noch das Alignment und
demzufolge das Padding eine Rolle.
Obiges muss z.B. zwingend 64bit beanspruchen, wenn noch ein uint64_t
enthalten ist, da dieses erfordert, dass die Structure n*8 Byte groß
ist.

-- 
B.Walter                   BWCT                http://www.bwct.de
ticso(at)bwct.de                                  info(at)bwct.de
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 30 Mar 2004 - 10:43:43 CEST

search this site