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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值