Re: Wie = überladen für Zeigerzuweisung?

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance

From: Christian Knapmeyer (knapmeyer_at_cms.tecmath.de)
Date: 02/18/04


Date: Wed, 18 Feb 2004 11:59:29 +0100


"Andreas Günther" <usenset19.3.angus@spamgourmet.com> schrieb :
> >struct Page {
> > BYTE Type;
> > BYTE WriteFlag;
> > BYTE Data[1014];
> > UINT Nr;
> > UINT CRC;
> >};
...
> Was sollte ein anderer Compiler beim Strukturaufbau anders machen?
> Oder ist das nicht im Standard festgelegt, wie die Variablen einer
> solchen Struktur (mit Pragma) im speicher angelegt werden
> (Reihenfolge, Position, ...)?

Die Reihenfolge ist so festgelegt, dass alle nichtstatischen Member innerhalb
eines "public/protected/private"-Abschnitts im Speicher aufsteigend angeordnet
sein müssen. Es ist dem Compiler aber überlassen, wie er die einzelnen
public/protected/private-Abschnitte innerhalb einer Klasse anordnet.

In Deinem Fall kannst Du Dich also auf die Reihenfolge verlassen, aber
nicht auf das Alignment.

Das #pragma pack() ist auch nicht standardisiert.
Im Standard steht nur, dass "#pragma" als Precompiler-Direktive
existiert, aber alles was dahinter steht ist dem jeweiligen Compiler
überlassen. Wenn der Compiler eine bestimmte #pragma-Anweisung
nicht kennt, soll er sie ignorieren.
Sowas wie #pragma pack() kennt wohl jeder Compiler (muss er
aber nicht), nur dass es u.U. anders heißt.

Auch der Typ UINT ( = unsigned int) ist nicht festgelegt.
Ein int kann z.B. 16 Bit, 32 Bit oder 64 Bit groß sein.
Der Standard macht darüber keine Vorschriften.

Gruß,
  Christian


Quantcast