您的位置:首页 > 编程语言

编程确定系统是32位还是64位

2016-04-06 19:45 459 查看
本文参考《深入理解计算机系统》

每台计算机都有一个字长(word size)指明整数和指针数据的标称大小(nominal size)。因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长位n的机器而言,虚拟地址的范围位0~2ⁿ-1,程序最多访问2ⁿ个字节。

明白了机器的字长定义了程序能够使用的虚拟地址的范围,那么32位字长就是4GB虚拟地址空间。随着处理器计算能力的发展,32为字长已经成为限制微处理器能力不断增长的主要因素。所以,更大字长的64位机器就出现了(X86-64),程序可以访问2^64字节存储器的能力。X86-64代码的主要特性如下:

a) 指针和长整数都是64位。整数算术运算支持8、16、32、64位数据类型。

b) 通用目的寄存器由32位系统的8个扩展到16个。

c) 许多程序状态都保存在寄存器中,而不是栈中。整型和指针类型的过程参数(最多六个)通过寄存器传递。有些过程根本不需要访问栈。

d) 如有可能,条件操作用条件传送指令实现,会得到比传统分支代码更好的性能。

e) 浮点操作用面向寄存器的指令集来实现,而不用基于栈的方法来实现。

所以可用编写程序查看指针的大小来确定系统的位数,代码如下:

#include<stdio.h>

int main(){
void *ptr;
printf("size of pointer is %ld bytes\n",sizeof(ptr));
printf("The system is %ld bits\n",sizeof(ptr)*8);
return 0;
}


xx@ubuntu:~/Workspace$ gcc sysbit.c -o sysbit

xx@ubuntu:~/Workspace$ ./sysbit

size of pointer is 8 bytes

The system is 64 bits

由此可见,本系统是64位系统。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  64位 32位 C 机器字长