我正在OS X上写一些二进制数据文件,以便在iOS设备上阅读.我试图阅读和编写以下结构:
struct poiStruct {
double latitude, longitude;
char titleString[41];
};
Run Code Online (Sandbox Code Playgroud)
我发现使用sizeof结构在OS X上占用64个字节,在iOS上占用60个字节.
任何想法/解释都非常感谢!
差异不在于元素的大小,而在填充中,在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
Run Code Online (Sandbox Code Playgroud)
而在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
Run Code Online (Sandbox Code Playgroud)
对齐是一个不同的要求,因为OS X在64架构上运行而iOS在ARM6/7上运行是32字节架构.在32位模式下编译你的OS X应用程序(这是可能的,但我不鼓励它)应该会使这种差异消失.
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |