🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #15297

Re: probleem met structuur

#15297
From: Matthijs
Date: Mon, 16 Oct 2000 00:00
102 lines
4112 bytes
According to Wim Dumon,
> Matthijs wrote:
> > According to Scorpion,
> > > > > Ik heb volgende structuur:
> > > > >
> > > > > typedef struct {
> > > > >  BYTE var1;
> > > > >  DWORD var2;
> > > > > } _test;
> > 
> > [is 8 bytes ipv 5]
> > 
> > [is wel 5 bytes door:]
> > > > #pragma pack(push)
> > > > #pragma pack(1)
> > > >
> > > >  typedef struct {
> > > >   BYTE var1;
> > > >   DWORD var2;
> > > >  } _test;
> > > >
> > > > #pragma pack(pop)
> > 
> > Mede door deze "onzin"(IMHO) denk ik er voorlopig niet aan om met C/C++
> > te beginnen. Waar slaat dit nou in hemelsnaam op(bij C/C++, niet jouw
> > antwoord)?
> 
> Alignment is een eis die door de processor waarvoor je compileert
> opgelegd wordt. C en C++ compilers zorgen er door padding bytes toe te
> voegen voor dat je programma efficient runt op dergelijke processoren.
> De toegevoegde bytes verschillen van processor tot processor (en
> mogelijks van compiler tot compiler). Of je nu pascal, assembler, java,
> of iets anders compileert: alignment moet altijd gebeuren om een
> efficient programma te krijgen.

Jaja, gaat een memcopy sneller met even aantallen bytes ofzo? Geen idee 
waarom. Past dan iets beter in een memory page? Worden pointers sneller 
berekend met een bepaalde offset?

> 
> > Is dit ANSI C (werkt het ook op een andere processor dan Intel-compatible)?
> 
> Ja, dit mag (moet) volgens de ANSI standaard.
> Ja, ook op andere processoren gebeurt dit.

Ik had het hier over het #pragma gegochel. Aangezien dit lijkt op machine 
code lijkt het me sterk dat dat in de ANSI standaard staat, maar ik heb 
hem nooit gelezen (ambtenaren-Engels bluh), en mijn C-kennis beperkt zich 
tot een "Basiscursus C/C++", Doom op Linux en MSDN voorbeelden compilen 
met Borland C++...

> 
> > Hoe is dit te rijmen met het antwoord van FB, die zegt
> > dat een byte is gedefd als een int?
> 
> AFAIK is BYTE niet door ANSI gestandardiseerd en bijgevolg kan je gelijk
> wat BYTE noemen. Een int BYTE noemen is IMHO niet heel katholiek :-)

> > Wordt er gewoon een byte van die int afgehakt?
> > 
> Als BYTE een typedef (of define) voor int is, is BYTE een int.
> Als BYTE een typedef (of define) voor char is, dan is BYTE een char.
> Maar een char is (volgens ANSI) niet perse 8 bit.

Dat was inderdaad niet zo.

> 
> Waarom maak je je zorgen om de grootte en de layout van je struct ?
> Compilers zijn doorgaans de best geplaatste tools om daarover te
> beslissen...

Zoals FB al zegt, het is belangrijk als je je struct naar een bestand 
wilt schrijven die uitwisselbaar moeten zijn met andere programma's of 
als je structs tussen libraries van verschillende compilers uitwisselt.

In Delphi is dit ingebouwd maar wel op een makkelijkere manier:

type
 Foo1 = record
  b: Byte;
  d: DWORD;
 end;

of

type 
 Foo2 = packed record
  b: Byte;
  d: DWORD;
 end;

SizeOf(Foo1) = 8;
SizeOf(Foo2) = 5;

De tweede is dus zonder padding voor efficiente alignment. Sommige 
declaraties uit de WinAPI hebben wel "packing", maar sommige niet, dus ik 
denk dat VC en Delphi wel dezelfde manier van padding voor alignment 
aanhouden.

Matthijs
-- 
WinAmp playing Iron Maiden - Wasted Years
Technical Details
Message-ID: <MPG.14556fd677bb3e20989722@news.xs4all.nl>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <UljG5.29720$s31.471928@afrodite.telenet-ops.be> <3MlG5.19859$Z7.336199@nlnews00.chello.com> <A9mG5.31247$s31.493710@afrodite.telenet-ops.be> <MPG.14552ffc56413268989718@news.xs4all.nl> <39EB29AF.8AEC6FA7@easics.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: 107324,f57e95232f06f286
X-Google-Attributes: gid107324,public
X-Google-Thread: fcea4,f57e95232f06f286
X-Google-Attributes: gidfcea4,public
From: Matthijs <matthijslaan@NOSPAMcia-agent.com>
Subject: Re: probleem met structuur
Date: 2000/10/16
Message-ID: <MPG.14556fd677bb3e20989722@news.xs4all.nl>
X-Deja-AN: 682171439
References: <UljG5.29720$s31.471928@afrodite.telenet-ops.be> <3MlG5.19859$Z7.336199@nlnews00.chello.com> <A9mG5.31247$s31.493710@afrodite.telenet-ops.be> <MPG.14552ffc56413268989718@news.xs4all.nl> <39EB29AF.8AEC6FA7@easics.be>
X-Complaints-To: abuse@xs4all.nl
X-Trace: news1.xs4all.nl 971723367 1577 194.109.156.251 (16 Oct 2000 19:09:27 GMT)
Organization: XS4ALL Internet BV
NNTP-Posting-Date: 16 Oct 2000 19:09:27 GMT
Newsgroups: be.comp.programming,nl.comp.programmeren