gpt4 book ai didi

c++ - 与 memcpy 相比,未对齐内存访问的 reinterpret_cast 的有效用例?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:41 27 4
gpt4 key购买 nike

在 snappy 的内部,有一个条件编译的部分选择了 dereferencing a reinterpret_cast'ed。指针作为在已知支持此类操作的体系结构(如 x86)上读取和写入可能未对齐的 16、32 和 64 位整数的最佳实现。其他架构的回退是使用 memcpy based implementation .

我的理解是 reinterpret_cast 实现表现出未定义的行为,而 clang 的未定义行为清理器确实标记了它。

但令我困惑的是:为什么不直接使用基于 memcpy 的实现?我希望除了最坏的编译器之外的所有编译器都使用内部函数来实现这些 memcpy 调用,因为大小在编译时是已知的。事实上,我希望任何现代工具链上的两种实现都具有相同的代码生成。

但是,我也认识到 snappy 是由了解自己的人编写的。所以这让我想知道使用 reinterpret_cast 机制是否还有一些优势胜过它的未定义行为。不希望性能取决于编译器的实现质量?还有什么我没有考虑的吗?

最佳答案

在不了解最初编写该代码的程序员的情况下,我怀疑您能否获得真正权威的答案。

这是我最好的猜测:作者不想依赖可能的 memcpy 优化(规范无法保证,即使它由许多编译器实现)。另一方面,编写 reinterpret_cast 非常非常有可能在几乎任何编译器上产生作者所期望的未对齐访问指令。

虽然聪明的现代编译器会优化 memcpy,但旧的编译器可能不会。一致的性能对该库来说非常关键,因此他们似乎牺牲了一些正确性(因为 reinterpret_cast 似乎是潜在的 UB)以支持在更广泛的编译器集上获得更一致的结果。

关于c++ - 与 memcpy 相比,未对齐内存访问的 reinterpret_cast 的有效用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663318/

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