关于基本类型的位数(sizeof)
一、 实践
打印iOS基本数据类型长度(ios12.1)
NSLog(@"short:%lu",sizeof(short));
NSLog(@"char:%lu",sizeof(char));
NSLog(@"int:%lu",sizeof(int));
NSLog(@"float:%lu",sizeof(float));
NSLog(@"long:%lu",sizeof(long));
NSLog(@"double:%lu",sizeof(double));
NSLog(@"long long:%lu",sizeof(long long));
NSLog(@"char *:%lu",sizeof(char *));
输出:
short:2
char:1
int:4
float:4
long:8
double:8
long long:8
char *:8
原因:因为操作系统选用的数据模型模型不同,导致int和long的位数有差别;
1. 类Unix平台(iOS、Mac、Linux)用LP64(long和point是64位即8字节)int为32位 ,long为64位;
2. window用LLP64(long long和point是64位)int为32位,long为32位
二、具体参考 https://blog.csdn.net/wzsy/article/details/42170825
32位环境涉及"ILP32"数据模型,是因为C数据类型为32位的int、long、指针。而64位环境使用不同的数据模型,此时的long和指针已为64位,故称作"LP64"数据模型。
现今所有64位的类Unix平台均使用LP64数据模型,而64位Windows使用LLP64数据模型,除了指针是64位,其他基本类型都没有变。
TYPE | LP32 | ILP32 | LP64 | ILP64 | LLP64 |
---|---|---|---|---|---|
CHAR | 8 | 8 | 8 | 8 | 8 |
SHORT | 16 | 16 | 16 | 16 | 16 |
INT | 16 | 32 | 32 | 64 | 32 |
LONG | 32 | 32 | 64 | 64 | 32 |
LONG LONG | 64 | 64 | 64 | 64 | 64 |
POINTER | 32 | 32 | 64 | 64 | 64 |
LP64意思是long和pointer是64位,
ILP64指int,long,pointer是64位,
LLP指long long和pointer是32-bit的。
ILP32指int,long和pointer是32位的,
LP32指long和pointer是32位的。
【关于基本类型的位数(sizeof)】64位编程模型:为什么要使用LP64:
https://blog.csdn.net/xanadut/article/details/9864891
https://blog.csdn.net/u011348293/article/details/10242089
https://blog.csdn.net/u011348293/article/details/10270689
推荐阅读
- 做一件事情的基本原理是什么()
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- 四首关于旅行记忆的外文歌曲
- 醒不来的梦
- dubbo基本认识
- 关于自我为中心的一点感想
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- 关于Ruby的杂想
- 关于读书的思考
- 关于this的一些问题(1)