32位和64位机数据类型的大小?32位指针为什么是4个字节?

您所在的位置:网站首页 float类型的大小为多少个字节 32位和64位机数据类型的大小?32位指针为什么是4个字节?

32位和64位机数据类型的大小?32位指针为什么是4个字节?

2023-11-06 13:00| 来源: 网络整理| 查看: 265

今天在CSDN论坛看到很多讨论int类型大小由什么决定,争论的由机器字长决定还是编译器决定,int类型比较特殊,具体的字节数应该是同机器字长和编译器都有关。

C、C++标准中只规定了某种类型的最小字节数(防止溢出)。

32位系统和64位有什么区别?

通常的64位技术是相对32位而言的,这个位数指的是CPU GPRs(General-Purpose register通用寄存器)的数据宽度为64位,而32位的处理器的通用寄存器的数据宽度为32位,64位指令集就是运行64位数据的指令,也就是说一次可以运行64bit的数据。 也就是说:

64位CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存;64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统和64bit软件的基础之上。

我们来了解一下几个名词:

通用寄存器:可用于传送和暂存数据,也可以参与算术逻辑运算,并保存运算结果。通用寄存器的长度取决于机器字长。字长:字长是CPU的主要技术指标之一,指的是CPU一次能并行处理的二进制的位数,字长是8的整倍数,通常的PC机的字长为16位,32位,64位。一台16位字长的PC机可以直接处理2^16(65536)之内的数字,对于超过此范围的数字需要分解的方法来处理。32位机比16位机优越的原因之一就在于它在一次操作中能处理的数字大,32位机字长的PC机能直接处理的数字为2^32(40亿),能处理的数字越大,则操作的次数就越少,从而系统的效率就越高。寻址空间:指能处理的寻址范围,要看处理器的地址总线的位数,而不是它的字长。 如Intel P4处理器字长为32位,地址总线也是32位。8086的数据总线为16位,地址总线为20位(则可寻址的内存空间为2^20=1MB)。64位处理器的数据总线为64位,地址总线大部分是32位。再看地址总线与寻址范围的关系,存储单元是以Byte为单位,N根地址总线能够访问2^N个存储单元,于是有32为地址总线可访问2^32个存储单元,即4GB。 32位指针为什么是4个字节?

所以指针为了正确指示内存中的地址,必须按照地址总线的宽度进行变量的存储,因此虽说64位CPU的数据宽度为64位而其地址总线一般不为64位(能访问的内存空间大的惊人,暂时估计应该还做不到),但是一般能超过32位,因此指针的长度大于4个字节(32位),所以64位机的指针字节为64位即8个字节,而32位机的地址总线一般为4个字节,即支持4GB的内存,则其指针的宽度为4个字节。

那么在不同的系统下什么数据类型大小会改变呢?

我们首先必须知道: 不同的平台上对不同数据类型分配的字节数是不同的,而平台是由处理器,操作系统及编译器才能决定的。 1. 64位处理器也可以装32位系统 2. 32位处理器上可以有16/32位的编译器 3. 即使是32位的编译器也可以有64位的整数(int64)

三者的长度可以不一样,但长度相等,比如32位的CPU+32位的OS+32位的Compiler,是最好的。

综上,虽然理论上来讲,数据类型的字节数应该是由CPU决定的,但实际上主要由编译器决定。

常用数据类型对应字节数 类型32位编译器64位编译器char1个字节1个字节char*4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节8个字节(同理64位编译器)short int2个字节2个字节int4个字节4个字节unsigned int4个字节4个字节float4个字节4个字节double8个字节8个字节long4个字节8个字节long long8个字节8个字节unsigned long4个字节8个字节


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3