byte alignement mit gcc

Gast #563699
Lesenswert?

Hallo

Kann mir bitte jemand sagen wieso

sizeof(Info) den Wert 32 liefert?


#pragma pack(1)
typedef  struct
{
  unsigned int a ;
  unsigned int Speed;
  unsigned char time;
  unsigned char val2 ;
  unsigned int temp;
  unsigned char Food;
  unsigned char LimitSwitchState;
  char Timeout;
  unsigned int BufCount;
  unsigned char CurrentT;
  unsigned int FFactor;
  unsigned int SFactor;

}TInfo;


TInfo Info;



nach meiner Rechung müsste das Ergbenis 18 sein.

Habe schon verschiedene Versionen von pack versucht

Vielen Dank

Frank
Gast #563745
Lesenswert?

Hallo,
da der ARM eine 32 Bit Architektur besitzt würde ich das mal vermuten. 
Ganz einfach herauszufinden mit sizeof(int). Die Summe der Struct 
Elemente beträgt dann 30. Die restlichen 2 Bytes werden aufgefüllt um 
die Struct selbst int aligned zu bilden.

gruss
markus
Gast #563859
Lesenswert?

@alle Antworter:
Woher wisst ihr, dass der OP einen ARM, bzw. irgendeinen 32Bit-Proz. 
benutzt? staun
SCNR
um konstruktiv zu sein: wenn der µC irgendein Alignment bevorzugt, 
solltest du die "char"s (und evtl. auch "short"s) zu Zweier- 
(Vierer-)Gruppen umsortieren.

hth. -Jörg
Gast #564079
Lesenswert?

Hallo zusammen

Ich entwickle für den LPC2148:) In der Tat, der Compiler ziert sich 
etwas beim Packen. Ich habe mir nun damit geholfen, dass ich die 
einzelnen Variablen mit Hilfe von memcpy in einen Byte-Puffer kopiert 
habe. Nicht gerade effizient aber es funktioniert.

Interessieren würde es mich aber doch noch ob es irgendwie möglich ist.

Beste Grüsse und vielen Dank

Frank

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren