32位和64位下的sizeof的大小
(2017-02-08 20:19:58)
标签:
sizeof3264int |
分类: C语言 |
CHAR
SHORT
INT
LONG
LONG LONG
POINTER
个人总结:
1、int不管32位和64位系统中,都是32位,4字节
2、指针的长度,和系统的位数一样
3、long只有在64位的linux中是64位的,其他都是32位
32位和64位开发环境差别?
如果你是使用Java/Python等跨平台的语言进行开发,那么恭喜你,所谓的64位和32位对你来说没有差别,因为底层的虚拟机已经屏蔽掉了这种差异,在语言的层面是不需要理解这种差异的(这也是跨平台的一个原因吧)。
但如果你是用C/C++,那就有点郁闷了:C/C++是和系统强相关的,你在32位机器上写的代码,拿到64位机器上运行,可能出现你意料之外的结果,甚至可能崩溃,而且你还很难定位!
问题虽然很严重,而原因很简单:32位系统使用的数据模型是ILP32,而64位系统使用的数据模型是LP64或者LLP64.
ILP32:指的是int, long, pointer长度是32位,取首字母合起来就是ILP32(下面的简写都是这样的),windows和Unix类32位系统都是这种模型;
LP64:指的是long, pointer是64位,这个是Unix类64位系统采用的数据模型;
LLP64:指的是long long, pointer是64位,而long还是32位,这是Windows的64位系统采用的模型;