16

这个答案带有一个有趣的陈述 - “在int*小于 a 的机器上char*”。(让我们排除指向函数的指针)

指向不同类型的指针是否有可能具有不同的大小?为什么这会有用?

4

5 回答 5

14

是的,这完全有可能。在某些机器上,指向字节的指针包含两个值:指向包含该字节的内存字的 WORD 地址的指针,以及给出字节在字中的位置的“字节索引”。例如,在 32 位机器上,“字节索引”为 0..3。

这将需要比“int *”更多的存储空间,“int *”只是指向相关单词的指针。

于 2013-04-05T11:25:31.820 回答
6

在单词寻址的机器上,achar*可能需要包含部分单词信息,使其大于int*.

该标准允许这样做,但不排除在此类硬件上的实现(尽管现在这种情况比 C89 设计时更加罕见)。

于 2013-04-05T11:27:54.583 回答
5

标签意味着您询问的是 C++ 及其兼容的实现,而不是某些特定的物理机器。

我必须引用整个标准来证明它,但简单的事实是它不保证sizeof(T*)for any的结果T,并且(作为推论)不保证sizeof(T1*) == sizeof(T2*)for any T1and T2)。

于 2013-04-05T11:35:59.133 回答
4

是的,指针不能保证具有相同的大小,尽管在大多数现代架构中,实际上它们是相同的。

这可能有用的一点是当人们关注数据与函数指针时。从历史上看,函数指针(用于实质上跳转到可执行代码中的某些部分)需要比数据指针更宽的所谓“远指针”。

于 2013-04-05T11:27:26.967 回答
2

我可以想象一台机器,假设int数组的内存需求将远低于char数组的内存需求。

例如,可以指定一个实现不会使用超过 10 个动态分配的整数,而是可以自由分配许多char数组。在这种情况下,一个字节可能足以满足 a int*,而 achar*需要四个字节或更多。

那是理论上的愿景。

于 2013-04-05T11:31:48.563 回答