繁体   English   中英

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

[英]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)的值为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 *)的代码,那么他们决定限制他们将支持的平台。 这绝对没问题——你不必支持所有古怪的架构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM