[英]Is sizeof(long) == sizeof(void*)?
C 是否保证sizeof(long) == sizeof(void*)
? 如果不是,为什么它在 Linux 内核源代码中被如此广泛地使用?
我看了sizeof(int) == sizeof(void*)? 但这谈到了sizeof(int)
与sizeof(void *)
。
不,C 标准不保证sizeof(long) == sizeof(void *)
。
实际上,在 Windows 64 位系统上, sizeof(long)
的值为4
, sizeof(void *)
的值为8
。 此设计符合 C 标准。 另请参阅64 位 Windows 上long
的位大小是多少?
那些实现 Linux 内核的人大概已经决定他们永远不会将代码移植到遵循 Windows 64 位 LLP64( long long
和指针是 64 位量)系统的系统,因此不需要关心自己大小是否不同。 32 位系统 (ILP32) 和 64 位系统 (LP64)都具有sizeof(long) == sizeof(void *)
。 但C标准不保证。
唯一的保证是:
void *
和char *
具有相同的大小和对齐方式;sizeof (const int *) == sizeof (int *)
);struct
指针类型具有相同的大小和对齐方式;union
指针类型具有相同的大小和对齐方式;而已。
如果 Linux 内核开发人员正在编写假定sizeof (long) == sizeof (void *)
的代码,那么他们决定限制他们将支持的平台。 这绝对没问题——你不必支持所有古怪的架构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.