加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

32位和64位下的sizeof的大小

(2017-02-08 20:19:58)
标签:

sizeof

32

64

int

分类: C语言

                                 windows32     

                                      linux32     linux64                windows64

 TYPE              LP32  ILP32   LP64     ILP64    LLP64

CHAR                                               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   


个人总结:

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(下面的简写都是这样的)windowsUnix32位系统都是这种模型;

LP64:指的是long, pointer64位,这个是Unix64位系统采用的数据模型;

LLP64:指的是long long, pointer64位,而long还是32位,这是Windows64位系统采用的模型;

0

阅读 收藏 喜欢 打印举报/Report
后一篇:不在
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有