指针可以有不同的大小吗?

时间:2013-04-05 11:22:11

标签: c++ pointers language-lawyer

This answer附带了一个有趣的声明 - “在int*小于char*”的机器上。 (让我们排除指向函数的指针)

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

5 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:6)

在单词寻址的计算机上,char*可能需要包含部分字词信息,使其大于int*

标准允许这样做,而不是排除在这些硬件上的实现(即使现在比设计C89时更加罕见)。

答案 2 :(得分:5)

标记表示您询问的是C ++及其兼容的实现,而不是某些特定的物理机器。

为了证明这一点,我必须引用整个标准,但简单的事实是它不能保证任何sizeof(T*) T的结果,并且(作为推论) )不保证任何sizeof(T1*) == sizeof(T2*)T1的{​​{1}}。

答案 3 :(得分:4)

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

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

答案 4 :(得分:2)

我可以想象一个机器,假设int数组的内存需求远远小于char数组的内存需求,这是有意义的。

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

这是一个理论愿景。