通过C编程如何判断当前Linux系统是32位还是64位?
通过指针变量的长度,即计算sizeof(int *)的值,如果等于4,就是32位系统,如果等于8,就是64位系统。
首先要知道指针变量存储的是所指向变量的地址,即该变量存放的是地址值。
对于32位系统,可取值的地址范围就是2^32, 则最大地址值也就是32位表示的二进制数地址,所以指针变量需要的存储空间也就是32位长度空间,也就是4个字节。
同理64位可表示的地址范围是2^64,也就需要8个字节长度的变量空间。
了解上面一点,也就明白无论是sizeof(char *),还是sizeof(double *),其值都是一样的,都只是指针变量所需要的存储空间大小。
除了指针变量大小在32位和64位系统下有区别,那其他基本数据类型在这两个系统下有什么区别呢?
通过如下测试程序,分别在32位系统和64位系统下执行,得到运行结果如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
printf("sizeof(int *) = %zu\n", sizeof(int *));
printf("sizeof(char) = %zu\n", sizeof(char));
printf("sizeof(short) = %zu\n", sizeof(short));
printf("sizeof(int) = %zu\n", sizeof(int));
printf("sizeof(long) = %zu\n", sizeof(long));
printf("sizeof(long long) = %zu\n", sizeof(long long));
printf("sizeof(float) = %zu\n", sizeof(float));
printf("sizeof(double) = %zu\n", sizeof(double));
return 0;
}
在32位系统下的运行结果:
sizeof(int *) = 4
sizeof(char) = 1
sizeof(short) = 2
sizeof(int) = 4
sizeof(long) = 4
sizeof(long long) = 8
sizeof(float) = 4
sizeof(double) = 8
在64位系统下的运行结果:
sizeof(int *) = 8
sizeof(char) = 1
sizeof(short) = 2
sizeof(int) = 4
sizeof(long) = 8
sizeof(long long) = 8
sizeof(float) = 4
sizeof(double) = 8