OS X和iOS之间的存储差异

时间:2012-11-26 22:40:26

标签: ios macos storage

我正在OS X上编写一些二进制数据文件,以便在iOS设备上阅读。我试图阅读并编写以下结构:

struct poiStruct {
    double latitude, longitude;
    char titleString[41];
};

我发现使用sizeof结构在OS X上占用64个字节,在iOS上占用60个字节。

对此的任何想法/解释都非常感谢!

2 个答案:

答案 0 :(得分:7)

差异不是元素的大小,而是填充,在OSX上,struct被对齐到8个字节的边界,所以它是

XXXXXXXX double (8 bytes)
YYYYYYYY double (8 bytes)
ZZZZZZZZ char (41 bytes)
ZZZZZZZZ
ZZZZZZZZ
ZZZZZZZZ
ZZZZZZZZ
ZPPPPPPP padding (7 bytes) = 64 bytes

在iOS上它与4个字节对齐,所以它是

XXXX double (8 bytes)
XXXX 
YYYY double (8 bytes)
YYYY
ZZZZ char (41 bytes)
ZZZZ
ZZZZ
ZZZZ
ZZZZ
ZZZZ
ZZZZ
ZZZZ
ZZZZ
ZZZZ
ZPPP padding (3 bytes) = 60 bytes

对齐是一个不同的要求,因为OS X在64架构上运行,而在ARM6 / 7上运行的iOS是32字节架构。以32位模式编译你的OS X应用程序(这是可能的,但我不鼓励它)应该会让这种差异消失。

答案 1 :(得分:2)

您的Mac App是64位应用程序,而iOS版本是32位。差异来自架构的不同填充要求,特别是32位要求变量为4字节对齐而64位需要8字节对齐,因此编译器将在结构的末尾添加不同数量的填充。