关于32位系统和64位系统说明
我们常说的32位系统和64位系统,是怎么来的呢?
其实这跟cpu硬件是有关的:
32位的处理器,指的是cpu一次能处理的最大位数是32位,也就是如下:
1111 1111 1111 1111 1111 1111 1111 1111
32位处理器,计算机中的位数指的是CPU一次能处理的最大位数。32位计算机的CPU一次最多能处理32位数据,例如它的EAX寄存器就是32位的,当然32位计算机通常也可以处理16位和8位数据。
同时:在计算机中,“位(bit)”和"字节(Byte)"、KB、MB以及TB的关系是:
8位等于一字节,即8bit=1Byte,1KB=1024Byte(字节)=8*1024bit,1MB=1024KB,1GB=1024MB,1TB=1024GB 。32位处理器每次处理 4Byte(32bit),同理,64位处理器每次处理 8Byte(64bit) 。
在32位的系统中,cpu内部和外部数据总线最后发展为32位,则最终最大寻址为4GB。
在64位系统中,也是同样的原理。而64位处理器一次就能处理64位,即8个字节的数据。如果我们将总长128位的指令分别按照16位、32位、64位为单位进行编辑的话:旧的16位处理器,比如Intel 80286 CPU需要8个指令,32位的处理器需要4个指令,而64位处理器则只要两个指令,显然,在工作频率相同的情况下,64位处理器的处理速度会比16位、32位的更快。
且除了运算能力之外,与32位处理器相比,64位处理器的优势还体现在系统对内存的控制上。由于地址使用的是特殊的整数,而64位处理器的一个ALU(算术逻辑运算器)和寄存器可以处理更大的整数,也就是更大的地址。传统32位处理器的寻址空间最大为4GB,使得很多需要大容量内存的数据处理程序在这时都会显得捉襟见肘,形成了运行效率的瓶颈。而64位的处理器在理论上则可以达到16777216个TB,1TB等于1024GB,1GB等于1024MB,所以64位的处理器能够彻底解决32位计算系统所遇到的瓶颈现象,速度快人一等。
和C语言的关系
当我们编程按照32位系统编程debug时,则寻址是32位,也是就8个16进程的数字来构成地址:
#include<stdio.h>
int main()
{
int a = 10;
printf("%p \n", &a);
return 0;
}
在32位系统的输出结果 :
1>------ 已启动生成: 项目: Project2, 配置: Debug Win32 ------
1> test1.c
1>d:\code\c\project2\project2\test1.c(7): warning C4172: 返回局部变量或临时变量的地址
1> Project2.vcxproj -> D:\Code\C\Project2\Debug\Project2.exe
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
cmd.exe输出结果为:
00EFFBFC
请按任意键继续. . .
在64位系统的输出结果为:
[root@pcserver ~]# gcc 1.c
[root@pcserver ~]# ./a.out
0x7fff8d73c61c
则此时为16个16进制数据,则为64位。
此文部分内容引用:
百度百科
https://baike.baidu.com/item/32位处理器/9830812