Heute habe ich ein Problem mit Swift-Strukturen festgestellt. Siehe folgende Struktur zum Beispiel:Swift berechnet die falsche Größe der Struktur
struct TestStruct {
var test: UInt16
var test2: UInt32
}
Ich würde davon ausgehen, dass die Größe dieser Struktur insgesamt 6 Bytes ist, weil UInt16 2 Bytes ist und UInt32 ist 4 Byte groß.
Der folgende Code druckt 6 (was richtig ist):
println(sizeof(UInt32) + sizeof(UInt16))
Aber wenn ich die Größe der Struktur mit
println(sizeof(TestStruct))
überprüfen druckt 8 und 6 nicht
Wenn ich das gleiche mit folgender Struktur versuche:
struct TestStruct2 {
var test: UInt16
var test2: UInt16
var test3: UInt16
}
Dann
println(sizeof(TestStruct2))
druckt den richtigen Wert: 6. Aber die Größe von TestStruct sollte die gleiche wie die Größe von TestStruct2 sein.
Warum ist die erste Struktur 8 Bytes groß? Mache ich etwas falsch oder ist das ein Fehler?
(mit Xcode 6.1.1 (6A2008a) auf OS X Mavericks, normale Kommandozeilen-Anwendung für Mac getestet)
Google "Struct Alignment" und Sie werden den Grund sehen. Es ist ein allgemeines Verhalten. Zum Beispiel: https://msdn.microsoft.com/en-us/library/71kf49f1.aspx –
Vergleichen http://stackoverflow.com/questions/28898277/why-does-some-types-float80-have-a- Speicherausrichtung - größer als Wortgröße. –
Danke, dass Sie mich in die richtige Richtung weisen! Ich war mir dessen nicht bewusst, sorry. Ich bin immer noch neu in den unteren Programmiersprachen wie C und Objective-C. Aber wie kann ich dann Daten von NSData in diese ausgerichtete Struktur bekommen? Wenn ich data.getBytes (& aStruct, length: sizeof (AStruct)) verwende, dann habe ich falsche Werte. – user4650218