| 上一篇 | 下一篇 |
|---|---|
| volatile 和 static 关键字 |
在 32 位和 64 位系统中,C 语言中各基本数据类型的大小并不完全由"32/64 位"决定 ,而是由 编译器 + 操作系统 + ABI(应用二进制接口) 共同决定。C++ 中基本数据类型的大小规则与 C 语言在相同平台和编译器下完全一致 。其他编程语言(如 Java、Python)则通常有固定或抽象化的类型大小。
1)总结表格
常见模型(以主流平台为例):
| 类型 | 32 位系统(如 x86 Windows/Linux) | 64 位系统(LLP64 模型,Windows) | 64 位系统(LP64 模型,Linux/macOS) |
|---|---|---|---|
char |
1 字节 | 1 字节 | 1 字节 |
short |
2 字节 | 2 字节 | 2 字节 |
int |
4 字节 | 4 字节 | 4 字节 |
unsigned int |
4 字节 | 4 字节 | 4 字节 |
long |
4 字节 | 4 字节 | 8 字节 |
unsigned long |
4 字节 | 4 字节 | 8 字节 |
long long |
8 字节 | 8 字节 | 8 字节 |
float |
4 字节 | 4 字节 | 4 字节 |
double |
8 字节 | 8 字节 | 8 字节 |
指针 (void*) |
4 字节 | 8 字节 | 8 字节 |
关键区别:
-
Linux/macOS 64 位 使用 LP64 模型 :
long和指针是 8 字节。 -
Windows 64 位 使用 LLP64 模型 :只有
long long和指针是 8 字节,long仍是 4 字节!
2)如何在 C 中查看实际大小?
c
#include <stdio.h>
int main() {
printf("int: %zu\n", sizeof(int));
printf("long: %zu\n", sizeof(long));
printf("void*: %zu\n", sizeof(void*));
return 0;
}