首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sizeof( >= *)是否必须sizeof(size_t)?

sizeof( >= *)是否必须sizeof(size_t)?
EN

Stack Overflow用户
提问于 2021-10-19 03:38:06
回答 1查看 121关注 0票数 8

这里有一个关于sizeof(size_t)sizeof(void*)相等的问题,公认的答案是它们不能保证相等。

但至少,必须是这样的:

sizeof(void*) >= sizeof(size_t)

我也这么想。因为,在给定的C实现中,取最大的存储对象,大小为S。现在,存储区域可以看作是大小为S的字节数组。因此,必须有一个指向每个字节的指针,并且所有这些指针都是可比较和不同的。因此,void*类型的distinct元素的数量必须至少是size_t类型的最大数量,该类型是无符号整数类型。因此,sizeof(void*) >= sizeof(size_t)

我的推理有没有意义?

EN

回答 1

Stack Overflow用户

发布于 2021-10-19 04:51:50

我的推理有意义吗?

更新的问题是,您假设最大对象的大小可能等于SIZE_MAX。但事实并非如此。如果你这样做了

代码语言:javascript
复制
void* p = malloc(SIZE_MAX);

你将(最有可能)得到一个空指针。

您还可能收到如下警告:

代码语言:javascript
复制
main.cpp:48:15: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
   48 |     void* p = malloc(SIZE_MAX);
      |               ^~~~~~~~~~~~~~~~

因为最大对象大小不是(总是) SIZE_MAX,所以不能使用SIZE_MAX的值来争论指针的大小。

顺便说一下:一些在SW级别使用64位指针的CPU实现在硬件级别可能没有64位指针。相反,一些位只是被视为全1/全0。

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

https://stackoverflow.com/questions/69624823

复制
相关文章

相似问题

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