32位系统和64位系统

前言

众所周知,我们通常说操作系统是32位还是64位说的其实是32位处理器(CPU)还是64位处理器(CPU),Windows系统有32位和64位之分,下面我们来总结一下32位系统和64位系统的原理、区别以及如何判断。

32位系统和64位系统的原理

我们现在所称的计算机系统是32位或64位主要依据的是CPU解析的字组大小(字组大小:CPU每次能处理的数据量)

  • 32位处理器

32位处理器是指CPU内部的通用寄存器的宽度为32比特,支持整数的32比特宽度的算术与逻辑运算。

32位系统CPU一次可处理32位数据,即一次处理4个字节。

  • 64位处理器

64位处理器是指CPU内部的通用寄存器的宽度为64比特,支持整数的64比特宽度的算术与逻辑运算。

64位系统CPU一次可处理64位数据,即一次处理8个字节。

32位系统和64位系统的区别

  • 数据的处理能力

64位系统通用寄存器的宽度相较于32位系统增加了一倍,可处理的数据位数也增加了一倍,数据处理的能力大大增强。

  • 内存的寻址能力

32位CPU的地址总线不会超过32根,那么它所能达到的寻址范围也就不会超过2的32次方字节(存储单元以字节为单位),也就是 4GB。

如果是64位CPU的话,它所能达到的寻址范围理论上就会是2的64次方字节(上亿GB)。

  • 要求的配置不同

32位操作系统可以安装在32位CPU或64位CPU的电脑上,当然,32位操作系统安装在64位电脑上,其硬件恰似“大马拉小车”:64位CPU的效能就会大打折扣。

64位操作系统只能安装在64位CPU的电脑上。

32位系统和64位系统的判断

  • 方法一:用命令查看

[root@localhost ~]# getconf LONG_BIT

[root@localhost ~]# uname -a(显示系统信息)输出:x86_64表示64位系统,i686 i386表示32位系统

[root@DB-Server ~]# arch或者uname -m 输出:x86_64表示64位系统,i686表示32位系统

  • 方法二:判断指针大小

指针是用来存放地址的变量。

32位的CPU上,地址是32个0或1组成的二进制序列,地址就得用4byte的空间来存储,所以一个指针变量的大小就是4byte。同理,64位的CPU上指针变量的大小就是8byte。

int main(){
    void *ptr = 0;
    printf("%d\n", sizeof(ptr));
    return 0;
}
  • 方法三:判断编码方式

gcc以__i386__来进行32位编码,以__x86_64__来进行64位编码

int main(){
    #ifdef __x86_64__
        printf("__x86_64__\n");
    #elif __i386__    
        printf("__i386__\n");
    #endif
    return 0;
}
  • 方法四:使用宏定义_WORDSIZE

输出size:64表示64位系统,输出size:32表示32位系统

int main(){
	printf("size:%d \n", __WORDSIZE);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章