zoukankan      html  css  js  c++  java
  • 32位和64位机数据类型的大小?32位指针为什么是4个字节?

    int类型大小由机器字长决定还是编译器决定,int类型比较特殊,具体的字节数应该是同机器字长和编译器都有关。

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

    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位指针为什么是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个字节
  • 相关阅读:
    《你不知道的javascript》读书笔记2
    你不知道的console调试
    《你不知道的javascript》读书笔记1
    使用js做LeetCode
    用装饰器来进行登录验证
    python 解压序列
    pycharm 的live_template的使用
    faker 库的使用
    Python常用内置类和常用内置函数汇总
    迭代器 ,生成器(生成器函数/生成器表达式)
  • 原文地址:https://www.cnblogs.com/lightmare/p/10398815.html
Copyright © 2011-2022 走看看