Menü
Avatar von int0h
  • int0h

28 Beiträge seit 22.01.2016

[C] W32 memory alignment?

Hallo,
seit einiger Zeit beschäftigt mich die Frage, warum die Verarbeitung von binären Speicherstrukturen auf die folgende Art und Weise nicht in W32 funktioniert. Mein Anliegen ist jedoch allenfalls in Neugier begründet. Die Qualität des folgenden Auszugs bitte ich daher nicht zu thematisieren.(Die Nachteile der Vorgehensweise sind bekannt)

Sei die Struktur tRawData definiert durch:

#pragma pack(4) typedef struct { unsigned :0; unsigned int rEmphas : 2; unsigned int rIsCopy : 1; unsigned int rCopyR : 1; unsigned int rModeExt : 2; unsigned int rChannelm: 2; unsigned int rPrivt : 1; unsigned int rPadding : 1; unsigned int rsFreq : 2; unsigned int rbitRate : 4; unsigned int rProtect : 1; unsigned int rLayer : 2; unsigned int rID : 2; unsigned int rSync : 11 } tRawData;

Ferner sei der Versuch unternommen, einen Speicherblock(z.B. unsigned char * buffer;(natürlich zunächst allokiert und gefüllt)) geeigneter Art auf die definierte Struktur abzubilden:

tRawData * target = malloc(sizeof(tRawData)); *(target + 0) = *((tRawData *)(buffer)+0); *(target + 1) = *((tRawData *)(buffer)+1); *(target + 2) = *((tRawData *)(buffer)+2); *(target + 3) = *((tRawData *)(buffer)+3); ... <Zugriff>: z.B.: if(!target->rID) funktionXY();

Diese Vorgehensweise ist unter Linux grundsätzlich kein Problem. Daher würde mich (aus Neugier) interessieren, aus welchem Grund dies in W32 nicht funktioniert. Bzw. welche betriebssystemspezifische Komponente es unmöglich macht.

Das Posting wurde vom Benutzer editiert (07.04.2016 01:37).

Bewerten
- +
Anzeige