C语言 Is sizeof(long) == sizeof(void*)?



C是否保证sizeof(long) == sizeof(void*)?如果没有,为什么它在Linux内核源代码中被如此广泛地使用?

我看了sizeof(int(==sizeof(void*(?但这涉及到CCD_ 2与CCD_。

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

实际上,在Windows 64位系统上,sizeof(long)的值为4sizeof(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 *)的代码,那么他们已经决定限制他们将支持的平台。这是绝对好的-你不必支持所有奇怪的架构。

最新更新