这个答案提出了一个有趣的观点:“在int*
比char*
小的机器上”。(不考虑指向函数的指针)
指向不同类型的指针可能具有不同的大小吗?这有什么用处?
是的,这完全有可能。在一些机器上,指向字节的指针包含两个值:一个指向包含该字节的内存单元的字地址的指针,和一个“字节索引”,该索引给出字节在单词内的位置。例如,在32位机器上,“字节索引”为0..3。
这将需要比“int *”更多的存储空间,因为“int *”只是指向相关单词的指针。
char*
可能需要包含部分字信息,使其比int*
更大。标准允许这样做,不是为了排除在这种硬件上的实现(即使在设计C89时这种情况更加罕见)。char*
和int*
大小不同的情况?请在此处链接您的答案:https://dev59.com/3V4b5IYBdhLWcg3wfx1J#29035972 - Shafik Yaghmourlanguage-lawyer 标签意味着您正在询问关于C++及其符合实现的问题,而不是特定的物理机器。
为了证明这一点,我必须引用整个标准,但简单的事实是它不保证对于任何T,sizeof(T*)
的结果,并且(作为推论),没有保证对于任何 T1
和 T2
,sizeof(T1*) == sizeof(T2*)
。
是的,指针的大小不能保证相同,虽然在大多数现代架构中,它们在实践中是相同的。
其中一个有用的点是涉及到数据和函数指针的区别。历史上,函数指针(用于基本上跳转到可执行代码中的某些部分)需要所谓的“far 指针”,这比数据指针宽。
我可以想象一种机器,假设 int
数组的内存需求远小于 char
数组的内存需求。
例如,有人可能会规定一个实现不会使用超过 10 个动态分配的整数,但是可以自由地分配许多 char
数组。在这种情况下,一个字节就足够了用来表示一个 int*
,而一个 char*
则需要四个或更多字节。
这只是一个理论上的想法。
char*
和int*
有不同的大小。已经有一段时间了,自从我读到这个问题以来,但是如果我没记错的话,这种情况非常罕见,更多地是与一些嵌入式系统相关。 - Kiril Kirovuintptr_t
对于所有指针类型来说都是固定大小的! - masouduintptr_t
被保证足够大以容纳所有指针类型,类似于void *
。 - Mats Petersson