PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : komfortables Datenpaket basteln


Gast
2008-01-24, 14:37:38
hallo

wir überlegen ob man sich irgendwie besser ein Datenpaket basteln kann, daß relativ groß ist und auf Bit-Ebene einem strengen Syntax folgen muß. Normalerweise könnte man einfach einen entsprechend großen Speicherbereich holen, die einzelnen Elemente des Pakets basteln und an die entsprechenden Stellen ins Paket kopieren.

Auf Sprachebene würde ich einfach ein struct verwenden, aber der Compiler baut da aus Cache-Alignment-Gründen die Elemente nicht exakt so im Speicher aneinander, wie sie definiert sind; die Daten sind immer einige Byte größer und liegen damit auch nicht exakt so im Speicher hintereinander. Im Prinzip möchte ich ein Struct über einen festen Speicherbereich legen und auf die einzelnen Werte so komfortabel zugreifen können wie möglich - und das muß compilerunabhängig sein.

Shink
2008-01-24, 15:13:06
Was die Leute so alles wollen...

Du könntest dir doch einen fixen Speicherbereich als Array reservieren und mittels selbstgebastelter Funktionen dafür sorgen, dass dort deine gewünschte Syntax eingehalten wird. Wenn du dann zum Zugreifen nur diese Funktionen verwendest, müsste das doch hinhauen oder überseh ich da was?

Monger
2008-01-24, 17:44:21
Warum sollte man sowas tun wollen? :|

Selbst wenn der Compiler sich auf sowas einlassen sollte: das Betriebssystem macht mit den Speicherseiten sowieso was es will.

Gast
2008-01-24, 19:22:01
Also in C(++) kann man das aligment für structs ausschalten und dann einfach die Struktur über den Speicherbereich mappen. So wird das ja auch bei IP Packeten mit ihren unterschiedlichen Layern gemacht. Man muß natürlich aufpassen, dass einige Plattformen (non x86) für einige Datentypen ein Aligment voraussetzen.

Trap
2008-01-24, 19:26:37
Also in C(++) kann man das aligment für structs ausschalten
Steht wo genau im C oder C++ Standard?

anderer Gast
2008-01-25, 08:02:58
Geht das nicht, wenn man ein struct in eine union zusammen mit einem Array fester Größe packt?

Gast
2008-01-25, 23:19:43
Steht wo genau im C oder C++ Standard?

Bin nicht sicher ob es im Standard steht das es wie gesagt nicht auf allen Plattformen funktionieren kann. Bei (allen?) x86 Compilern geht es jedenfalls mit

#pragma align (und dann Parameter)

und nach Benutzung wieder zurück stellen.