gpt4 book ai didi

c++ - `reinterpret_cast(reinterpret_cast(&ch) + 1) == &ch +1` 有保证吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:50 26 4
gpt4 key购买 nike

我正在编写与对齐相关的代码,如果给定的指针正确对齐,却没有标准的功能测试,这让我感到非常惊讶。

似乎互联网上的大多数代码都使用(long)ptrreinterpret_cast<uintptr_t>(ptr)测试对齐,我也使用了它们,但我想知道使用指向整数类型的强制转换指针是否符合标准。

这里是否有任何系统触发断言?

char ch[2];
assert(reinterpret_cast<char*>(reinterpret_cast<uintptr_t>(&ch[0]) + 1)
== &ch[1]);

最佳答案

回答题目中的问题:没有。

反例:在旧的 Pr1me 微型计算机上,一个普通指针是两个 16 位字。第一个字是 12 位段号、2 个环位和一个标志位(不记得第 16 位)。第二个字是段内的 16 位字偏移量。 char*(因此是 void*)需要第三个词。如果设置了标志位,则第三个字为 0 或 8(是寻址字内的位偏移量)。此类机器的 uintptr_t 需要是 uint48_tuint64_t。无论哪种方式,将 1 加到这样的整数都不会前进到内存中的下一个字符。

能力寻址的机器也可能有比地址空间大得多的指针,并且没有特别的理由为什么相应整数的最低有效部分应该是“地址”的一部分而不是“地址”的一部分额外信息。

当然,在实践中,没有人在为 Pr1me 编写 C++,而且功能寻址的机器似乎也没有出现。它适用于所有真实系统 - 但标准并不能保证这一点。

关于c++ - `reinterpret_cast<char*>(reinterpret_cast<uintptr_t>(&ch) + 1) == &ch +1` 有保证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34760583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com