iOS 数据类型占用内存

2020-08-20  本文已影响0人  MQ_Twist

不要去寻找那些你不想遇到的东西。

前言

坐在马桶上冥想的时候,就思绪满天飞,不知道为啥就想到有次面试的时候,被问到iOS的数据类型占用内存情况,最近还是有点时间就整理了一下。

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个字节
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个字节

快速记忆法
只有char*(32位 4 Byte,64位 8 Byte)和long(32位 4 Byte,64位 8 Byte)所占字节是不同的。

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

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

#if __LP64__ || 0 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

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

后记

温故而知新,可以为师矣。

上一篇 下一篇

猜你喜欢

热点阅读