Сегодня у меня возникла проблема с структурами Swift. См следующую структуру: напримерSwift вычисляет неправильный размер структуры
struct TestStruct {
var test: UInt16
var test2: UInt32
}
Я хотел бы предположить, что размер этой структуры в общей сложности 6 байт, так как UInt16 2 байта и UInt32 составляет 4 байта большой.
Следующий код печатает 6 (что правильно):
println(sizeof(UInt32) + sizeof(UInt16))
Но если я проверить размер структуры с
println(sizeof(TestStruct))
печатает 8, а не 6.
Если я попробую сделать то же самое со следующей структурой:
struct TestStruct2 {
var test: UInt16
var test2: UInt16
var test3: UInt16
}
Тогда
println(sizeof(TestStruct2))
печатает правильное значение: 6. Но размер TestStruct должен быть таким же, как размер TestStruct2.
Почему первая структура размером 8 байтов? Я делаю что-то неправильно или это ошибка?
(протестировано с Xcode 6.1.1 (6A2008a) на OS X Mavericks, нормальные командная строка приложение для Mac)
Google «выравнивание структуры», и вы увидите причину. Это общее поведение. Например: https://msdn.microsoft.com/en-us/library/71kf49f1.aspx –
Сравните http://stackoverflow.com/questions/28898277/why-does-some-types-float80-have-a- память выравнивания больше, чем слова размера. –
Спасибо, что указал мне в правильном направлении! Я не знал об этом, извините. Я все еще новичок в языках более низкого уровня, таких как C и Objective-C. Но тогда, как я могу получить данные из NSData в эту выровненную структуру? Если я использую data.getBytes (& aStruct, length: sizeof (AStruct)), то у меня неправильные значения. – user4650218