2位处理器就是一次只能处理32位,也就是4个字节的数据,虚拟地址空间的最大大小是4G,而64位处理一次就能处理64位,即8个字节的数据,最大虚拟地址空间的最大大小是
16T。
最明显的是指针大小的变化,32位系统指针是32位,64位系统指针是64位。其他的,int都是32位,short都是16位,long 32位系统是32位,64位系统为64位,size_t ssize_t 32位系统为32位,64位系统为64位。
判断方法:
- #include "stdio.h"
- int main(int argc,char * argv[])
- {
- void* number = 0;
- printf("%d\n",sizeof(&number));
- }
不用sizeof判断16位还是32位的例子,主要是按照int的长度来判断的
- A1:
- 16位的系统下,
- int i = 65536;
- cout << i; // 输出0;
- int i = 65535;
- cout << i; // 输出-1;
- 32位的系统下,
- int i = 65536;
- cout << i; // 输出65536;
- int i = 65535;
- cout << i; // 输出65535;
- A2:
- int a = ~0;
- if( a>65536 )
- {
- cout<<“32 bit”<<endl;
- }
- else
- {
- cout<<“16 bit”<<endl;
- }
- #define OS_BITS (((int)((int *)0 + 1)) << 3)
- int *p=NULL; //0x00000000
- int *ptr = p + 1; //0x00000004
- int res = (int)ptr; // 4
- int myres = res <<3; //32
BUT:这样做的方法都不对,这样只能知道编译器是什么型的,不能知道系统是什么型的。因为想(int *)或sizeof(int)都是由编译器处理的东西,它们的长度由编译器确定,并不受目标系统的影响。