32位正常,64位随机崩溃问题

项目在iPhone 5,4s模拟器上运行完全正常。而在5s,6模拟器上经常会随机崩溃,偶尔正常,崩溃的位置一般在固定的几处,比如hashtable find函数。5s以上是64位cpu。通过排除法找到了项目中用到的一个第三方写的加密类,里面把一个4字节类型定义成了long,而long在64位下是8个字节,导致堆溢出了,覆盖了后面的其他数据。

一.c语言数据占用字节

32位:char 1    short  2   int 4  long 4  long long 8

64位:char 1    short 2    int 4  long 8  long long 8

二.编译器的数据模型

Datetype  LP64   ILP64   LLP64   ILP32    LP32

char           8          8         8            8          8

short          16       16       16           16        16

int               32       64       32           32        16

long            64       64       32           32         32 

long long    64

pointer        64       64        64           32        32

一般情况下windows64位一般使用LLP64模型

64位Unix,Linux使用的是LP64模型

综合来看,32位程序升级64位主要是long和pointer指针长度不一致,需要相应的做修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值