是 sizeof(long) == sizeof(void*) 吗?

ZeZ*_*NiQ 2 c linux-kernel

C 能保证sizeof(long) == sizeof(void*)吗?如果不是,为什么它在 Linux 内核源代码中使用得如此广泛?

我看了sizeof(int)==sizeof(void*)?但那是关于sizeof(int)vs 的sizeof(void *)

Jon*_*ler 10

不,C 标准不保证sizeof(long) == sizeof(void *).

实际上,在 Windows 64 位系统上,值为4forsizeof(long)8for sizeof(void *)。此设计符合 C 标准。另请参阅64 位 Windows 上的位大小是long多少?

那些实现 Linux 内核的人大概已经决定,他们永远不会将代码移植到遵循 Windows 64 位 LLP64(long long指针是 64 位数量)系统的系统,因此他们不需要担心尺寸不同。32 位系统 (ILP32) 和 64 位系统 (LP64)具有sizeof(long) == sizeof(void *). 但是 C 标准不保证它。