不要去寻找那些你不想遇到的东西。
前言
坐在马桶上冥想的时候,就思绪满天飞,不知道为啥就想到有次面试的时候,被问到iOS的数据类型占用内存情况,最近还是有点时间就整理了一下。
- 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个字节
快速记忆法
只有char*
(32位 4 Byte,64位 8 Byte)和long
(32位 4 Byte,64位 8 Byte)所占字节是不同的。
特别的:4个字节的最大范围是4294967295, int
只是占四个字节,不能用int
来存储四个字节的数,要不然会越界。
-
int
与NSIntege
区别
在苹果的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
NSInteger
与int
的区别是NSInteger
会根据系统的位数(32or64)自动选择int
的最大数值(int or long)。
后记
温故而知新,可以为师矣。