前言
众所周知,我们通常说操作系统是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;
}