这里有一个关于sizeof(size_t)和相等的问题sizeof(void*),公认的答案是它们不能保证相等。
但至少,必须是:
sizeof(void*) >= sizeof(size_t)
我想是这样。因为,取给定 C 实现中可能的最大存储对象,大小为S。现在,存储区域可以被认为是大小为 的字节数组S。因此,必须有一个指向每个字节的指针,并且所有这些指针都是可比较的和不同的。因此,类型 的不同元素的数量void*必须至少是类型 的最大数量size_t,这是无符号整数类型。因此sizeof(void*) >= sizeof(size_t)。
我的推理有道理吗?
我的推理有道理吗?
您推理的问题在于您假设最大对象的大小可能等于 SIZE_MAX。但事实并非如此。如果你这样做
void* p = malloc(SIZE_MAX);
Run Code Online (Sandbox Code Playgroud)
你(很可能)会得到一个 NULL 指针。
您还可能会收到如下警告:
main.cpp:48:15: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
48 | void* p = malloc(SIZE_MAX);
| ^~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
由于最大对象大小不是(始终)SIZE_MAX,因此您不能使用 SIZE_MAX 的值来争论指针的大小。
顺便说一句:某些在软件级别使用 64 位指针的 CPU 实现在硬件级别可能没有 64 位。相反,某些位仅被视为全一/全零。
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |