编程确定系统是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) 浮点操作用面向寄存器的指令集来实现,而不用基于栈的方法来实现。
所以可用编写程序查看指针的大小来确定系统的位数,代码如下:
xx@ubuntu:~/Workspace$ gcc sysbit.c -o sysbit
xx@ubuntu:~/Workspace$ ./sysbit
size of pointer is 8 bytes
The system is 64 bits
由此可见,本系统是64位系统。
每台计算机都有一个字长(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位系统。
相关文章推荐
- Linux C函数参考手册(PDF版)
- VB实现的16位和32位md5加密代码分享
- C# partial关键字说明
- Lua教程(十七):C API简介
- 简单谈谈lua和c的交互
- C#中的委托数据类型简介
- C#编写的艺术字类实例代码
- C#实现打造气泡屏幕保护效果
- 举例讲解C#编程中委托的实例化使用
- 使用C#代码获取存储过程返回值
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C 语言基础教程(我的C之旅开始了)[三]
- 学习C和C++的9点经验总结
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- 最大子矩阵问题实例解析
- C字符串操作函数实现方法小结