app支持64位的一些总结

64-bit运行时环境和32-bit运行时环境主要有以下两点的不同:

1:数据类型的改变

2:方法调用上的改变

整型数据类型的变化如下

关于字节对齐的概念可以参考如下链接:http://blog.csdn.net/21aspnet/article/details/6729724#comments

浮点型类型的改变如下

:

数据类型的改变可能会为我们的程序带来这些影响: 

增加内存压力

64-bit到32-bit数据之间的相互转化

计算可能产生不同的结果

当把一个值从大的数据类型拷贝到小的数据类型,数据可能被截断。(NSInteger -> int)

方法调用上的改变

基于32-bit的CPU和基于64-bit上的CPU有不同数量的寄存器,在方法调用上有不同的协议。因此32-bit和64-bit在汇编层级上是不同的。如果我们在程序中不使用汇编编程,调用协议很少会遇到.

如objc_msgSend的变化:

((id (*)(id, SEL, id))objc_msgSend)(plugin , selector,cmd);

替换成

void (*objcMsgSend)(id, SEL, id) = (void*)objc_msgSend;

objcMsgSend(plugin , selector,cmd);

如何编写健壮的64-bit代码

  • 不要将长整型long赋值给整型int (64-bit上会导致数据丢失)
  • 不要将指针类型pointer赋值给整型int (64-bit导致地址数据丢失)
  • 留意数值计算(掩码计算,无符号整数和有符号整数同时使用等)
  • 留意对齐方法带来的变化
  • 32-bit到64-bit之间数据转化(通过网络传递的用户数据,可能同时存在于32-bit和64-bit的环境下)
  • 重写汇编代码
  • 不要在可变参数方法和不可变参数方法之前进行强制转化

具体:http://www.codeceo.com/article/ios-64-bit.html

猜你喜欢

转载自linwwwei.iteye.com/blog/2210825
今日推荐