首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sizeof(long) ==是sizeof(void*)吗?

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

Stack Overflow用户
提问于 2020-08-25 06:53:11
回答 2查看 151关注 0票数 2

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

我看过sizeof (int) == sizeof (void*)?,但它谈到了sizeof(int)sizeof(void *)

EN

回答 2

Stack Overflow用户

发布于 2020-08-25 06:56:40

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

实际上,在Windows64位系统上,sizeof(long)的值为4sizeof(void *)的值为8。本设计符合C语言标准。另请参阅What is the bit-size of long on 64-bit Windows?

那些实现Linux内核的人可能已经决定,他们永远不会将代码移植到遵循Windows64位LLP64 (long long和指针是64位数量)系统的系统上,因此不需要关心大小是否不同。32位系统(ILP32)和64位系统(LP64)都有sizeof(long) == sizeof(void *)。但是C标准并不能保证这一点。

票数 10
EN

Stack Overflow用户

发布于 2020-08-25 07:48:30

唯一的保证是:

  • void *和alignment;
  • Pointers具有相同的大小,sizeof (const int *) == sizeof (int *));
  • All to限定类型的大小和对齐方式与指向其非限定等效项的指针的大小和对齐方式相同(即alignment;
  • All struct指针类型具有相同的大小,而char * union指针类型具有相同的大小和对齐方式;

就这样。

如果Linux内核开发人员正在编写假设为sizeof (long) == sizeof (void *)的代码,那么他们已经决定限制他们将要支持的平台。这绝对没问题--你不需要支持所有奇怪的架构。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63569700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档