前言
在计算机的发展中,经历了8位机到64位机的历程,在不久的将来还会有更高位长的计算机出现,它们的每一次升级都是技术的一次大进步,正是如此才构造如此纷繁多样的数字电子世界。尽管高性能计算机不断涌现,但是诸如低端的8位机也并没有退出人们的视野,比如常见的51及STM8系列的8位机仍然用在一些实时控制终端领域。如何识别操作系统的位长,这是一个程序员面试常考题,这里用C语言剖析如何实现操作系统位长的判断。
算法实现
操作系统的位长决定机器的寻址能力,比如8位机的寻址能力为2^8=256B、32位机的寻址能力为2^32=4GB、64位机的寻址能力为2^64=……好吧,反正挺大的,足够现在的计算场景应用了。理解了计算机的内存寻址,那么C语言的指针就派上用场,指针作为内存地址的映射反映着计算机的寻址范围。8位机的寻址总线为8位,那么它的指针的大小也是8位的,其它的也与此类似。根据这个原理,我们用两种方法实现操作系统位数判断:
- sizeof(指针)形式,通过求取指针的大小来反映主机的位长
- 指针数组形式,通过一个数组存放两个地址空间连续的指针元素,然后相减得到主机位长
#include <stdio.h>
int main(int argc, char* argv[])
{
char* tmp;
char *p[2];
printf("use the sizeof method\n");
printf("The oprerate system bit is = %d\n",8*sizeof(tmp));
printf("use the pointer array method\n");
printf