iOS设备上是否允许未对齐的内存访问?

时间:2015-04-17 20:19:03

标签: ios iphone arm

我目前正致力于加载blob紧凑数据的应用程序,这些数据包含可能无法正确对齐的不同整数类型(从char到int的大小)。

那么,我可以对该数据使用简单的*(short*)ptr或类似访问吗?在我的iphone 5上测试显示没有问题,但我不确定所有新处理器上的所有情况。

我确实找到了一些相关的信息,比如:

  除了一些微控制器版本之外,ARMv6及更高版本支持半字和单字加载/存储指令的未对齐访问,但有一些限制,例如没有保证原子性。

但是在单词的情况下,似乎在32位和64位ARM上相应的字32和64位,这意味着短路需要在64位机器上正确对齐。

那么,我可以假设这是安全的,还是应该使用像__packed这样的关键字? 或者我应该完全避免它并重新创建我的数据,以便它始终具有正确的对齐方式(或者当数据来自外部源并且不能通过永久修改时始终使用memmove?)

1 个答案:

答案 0 :(得分:1)

很久以前,我尝试过它。它起作用,但每次访问未对齐的内存都会导致陷阱,这需要相当长的时间。我建议你测量增加一百万个对齐短裤与一百万个未对齐短裤需要多长时间。如果您有几百或几千个未对齐的数字,则无需担心。

__打包工作得相当快。 ARM有一些聪明的指令,可以用非常少的指令进行非对齐访问。再一次,我衡量需要多长时间。我对此的体验不是最新的。