• 32?64?


    代码,最后会变成一堆01机器码,放在可执行文件里,躺在磁盘上
    在这里插入图片描述

    执行

    1. 文件:硬盘->内存->CPU

    2. CPU:

      1. 内存数据->总线->寄存器
      2. 寄存器->总线->内存

    在这里插入图片描述

    CPU位数

    在这里插入图片描述

    1. 寄存器:存放数值,大小叫位宽。32位CPU能放入最大2^32 的数值,
      64位就是最大2^64的值。32位位宽的CPU就是常说的32位CPU,同理64位CPU也是一样。

    2. 总线:CPU跟内存之间,是用总线来进行信号传输的,总线可以分为数据总线,控制总线,地址总线。
      32位CPU的总线宽度一般是32位,最大能寻址的范围,也就到2^32,就是4G。
      64位CPU,按理说总线宽度是64位,但实际上是48位,所以寻址范围能到2^48次方,也就是256T。

    系统和软件的位数

    1. 在操作系统上运行一个用户态进程,会分为用户态和内核态,并设定一定的内存布局。
    2. 操作系统和软件都需要以这个内存布局为基础运行程序。32位机器,内核态分配了1个G,用户态分配了3G,总不能将程序的运行内存边界设定在大于10G的地方。所以,系统和软件的位数,可以理解为,这个系统或软件内存寻址的范围位数。
      在这里插入图片描述

    int32和int64

    int32也就是用4个字节,32位的内存去存储数据,int64也就是用8个字节,64位去存数据。这个数值就是刚刚CPU运行流程中放在内存里的数据。

    32位的CPU能进行int64位的数值计算吗?

    能,但比起64位的CPU,性能会慢一些。

    1. 64位的CPU在计算两个int64的数值相加时,可以将数据通过64位的总线,一次性存入到64位的寄存器,并在进行计算后返回到内存中。

    2. 32位的CPU,虽然在代码里放了个int64的数值,但实际上CPU的寄存器根本放不下这么大的数据,因此最简单的方法是,将int64的数值,拆成前后两半,现在两个int64相加,就变成了4个int32的数值相加,并且后半部分加好了之后,拿到进位,才能去计算前面的部分,这里光是执行的指令数就比64位的CPU要多。所以理论上,会更慢些。

    python中number没有长度限制

    struct PyLongObject{
    long ob_refcnt;                // 引用计数,64位系统占8 bytes, 32位系统占4 bytes
    struct_typeobject *ob_type;    // 类型指针,64位系统占8 bytes, 32位系统占4 bytes
    long ob_size;                  // 数据部分int的个数,64位系统占8 bytes, 32位系统占4 bytes
    unsigned int ob_digit[1];      // 64位系统占4 bytes * abs(ob_size); 32位系统占2 bytes * abs(ob_size);
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    对于64位Python:

    ob_refcnt,ob_type,ob_size各占8字节。当ob_size为0时,ob_digit不存在,否则其字节数为4abs(ob_size),所以最少为83=24字节,而且每次增量都是4的倍数。

    对于32位Python:

    ob_refcnt,ob_type,ob_size各占4字节。当ob_size为0时,ob_digit不存在,否则其字节数为2abs(ob_size),所以最少为43=12字节,而且每次增量都是2的倍数。

    采用这种处理方式,Python的整型变量基本上可做到无长度限制。

  • 相关阅读:
    面试 4
    干货!适应环境变化的公平意识在线元学习
    Ansible 快速入门到放弃
    深入探讨梯度下降:优化机器学习的关键步骤(三)
    反射内存卡驱动的安装
    正则表达式匹配双引号
    为vscode开发一款svn右键菜单扩展
    Linux修改主机名
    加列法计算lower unit matrix inversion
    JSON对象、字符串之间的相互转换
  • 原文地址:https://blog.csdn.net/General_zy/article/details/126754930