C编程-32位和64位数据类型区别

Posted by 周思进 on January 4, 2020

通过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