iOS 在32位和64位下,数据类型占用字节 内存对齐规则

内存对齐看这里:https://www.jianshu.com/p/3294668e2d8c

iOS 在32位和64位下,数据类型占用字节

32位编译器

char :1个字节

char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)

short int : 2个字节

int:  4个字节                        范围  -2147483648~2147483647

unsigned int : 4个字节

long:  4个字节                         范围 和int一样

long long:  8个字节                 范围  -9223372036854775808~9223372036854775807

unsigned long long:  8个字节    最大值:1844674407370955161

float:  4个字节

double:  8个字节


64位编译器

char :1个字节

char*(即指针变量): 8个字节

short int : 2个字节

int:  4个字节                      范围  -2147483648~2147483647

unsigned int : 4个字节

long:  8个字节                     范围  -9223372036854775808~9223372036854775807

long long:  8个字节            范围  -9223372036854775808~9223372036854775807

unsigned long long:  8个字节    最大值:1844674407370955161

float:  4个字节

double:  8个字节

注意:64bit和32bit下  long 和char*所占字节是不同的

4个字节的最大范围是4294967295, int只是占四个字节 不能用int来存储四个字节的数,要不然会越界


int与NSInteger区别

在苹果的api实现中,NSInteger是一个封装,它会识别当前操作系统的位数,自动返回最大的类型。

定义的代码类似于下:

ifLP64|| TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64

typedef long NSInteger;

typedef unsigned long NSUInteger;

else

typedef int NSInteger;

typedef unsigned int NSUInteger;

endif

NSInteger与int的区别是NSInteger会根据系统的位数(32or64)自动选择int的最大数值(int or long)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值