C/C++基本数据类型长度

1. CPU位数

CPU位数=CPU中寄存器的位数=CPU能够一次并行处理的数据宽度(位数)=数据总线宽度;现在的计算机处理器一般都是64位,这是硬件的事。
查看CPU位数:右键点击桌面上的“此电脑”图标,然后在弹出的菜单中点击“属性”菜单项。

2. 操作系统位数

指令集:
CPU为了实现其功能设计了指令集,即是CPU的全部指令,这是机器语言。计算机的所有功能都是基于CPU的指令集。指令集和CPU的位数是有联系的。如Intel 8086 CPU 是16位,其指令集也是16位。如Intel 80386DX CPU 是32位,其指令集也是32位,但它也保持原16位指令集,这是为了向上兼容。有64位CPU上运行32位操作系统、32位CPU上运行16位操作系统的情况,也是为了向上兼容。
操作系统位数 = 其所依赖的指令集位数 <= CPU位数

3. 机器字长

电脑技术中对CPU在单位时间内(同一时间)能一次处理的二进制数的位数叫字长。

4. 编译器位数

编译器位数对数据类型长度的影响:
1、有影响,但是很小。这个影响在不同的编译器是不同的。
微软的CL只有32位,对,只有32位,但是它能编译x64,所以对于CL来说,编译器的位数没有意义。编译的目标代码指针位宽取决于参数是指定x86还是x64.gcc和clang,编译器本身的位宽决定不加特别参数指定,默认编译的目标代码的指针位宽跟编译器本身位宽相同。但是,如果你编译编译器的时候允许了multilib,那么你还可以通过m32或者m64之类的参数来决定输出的目标代码的位宽是32还是64。总结一下就是,只影响不指定处理器参数的默认生成的目标代码的位数。
2、数据类型取决于编译器。
有人觉得,类似于wchar_t这种基本也算是标准类型了,在Linux上是32位在windows上是16位,这不是操作系统相关吗?但是你要想啊,决定这个到头来还是编译器啊。你看我在windows上能编译Linux运行的程序,在Linux上也能编译Windows运行的程序。甚至我还能编译arm、arm64、mips、misp64等等的,所以跟编译器的运行环境没关系。跟你的目标才有关系。
作者:Pluto Hades
链接:https://www.zhihu.com/question/41801362/answer/92399285
来源:知乎

5. 数据类型长度

C标准中并没有具体给出规定那个基本类型应该是多少字节数,而且这个也与机器、OS、编译器有关,比如同样是在32bits的操作系统下,VC++的编译器下int类型为占4个字节;而tuborC编译器下则是2个字节。
所以int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的):

  • sizeof(short int)<=sizeof(int)
  • sizeof(int)<=sizeof(long int)
  • short int至少应为16位(2字节)
  • long int 至少应为32位(4字节)

经WinXP和Win7 64位系统测试,应该跟系统没关系,而是跟CPU位数+编译器的平台有关系,两台电脑都是64位CPU,所以结果是一样的,同一类型的有符号和无符号长度一样,只不过值的范围不一样。

数据类型字节数(16位编译器)字节数(32位编译器)字节数(64位编译器)总结
char111char一直占用1个字节
char*248char* 是指针位宽,N位系统含有N个位,占用N/8个字节
short222short一直占用2个字节
int244int在x86和x64都是4个字节
unsigned int244无符号int与int本身的占位一样,不区分编译器
long448long一直等同于float
long long888long long一直等同于double
float448float由于带浮点至少需要4字节,在x64编译器里是8字节
double888double一直占8个字节

6. 参考资料

https://www.cnblogs.com/chakyu/p/7405275.html
https://blog.csdn.net/Bigcat_u/article/details/82821326

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值