• 32位和64位机数据类型的大小


    转载:https://blog.csdn.net/baidu_37964071/article/details/81389259

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

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

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

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

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

    为什么不同位数的操作系统指针大小不同

      明白了两个系统的寻址原理就能明白,32位与64位系统的寻址空间大小不同(寻址空间:https://jrhar.blog.csdn.net/article/details/78508795?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control),大体就是这个原因。地址跟系统有关,但是基本数据类型占的大小是由C语言本身决定。

    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位编译器
    char 1个字节 1个字节
    char* 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节 8个字节(同理64位编译器)
    short int 2个字节 2个字节
    int 4个字节 4个字节
    unsigned int 4个字节 4个字节
    float 4个字节 4个字节
    double 8个字节 8个字节
    long 4个字节 8个字节
    long long 8个字节 8个字节
    unsigned long 4个字节 8个字节
  • 相关阅读:
    NYOJ-301递推求值
    二叉树
    从c到c++
    NYOJ-93汉诺塔(三)
    历届试题 最大子阵
    最大子序列和最大子矩阵
    【贪心】电视节目安排
    【贪心】线段覆盖
    【贪心】取数游戏
    【贪心】智力大冲浪
  • 原文地址:https://www.cnblogs.com/zyk1113/p/14341581.html
Copyright © 2020-2023  润新知