在 snappy 的内部,有一个条件编译部分选择取消引用 reinterpret_cast'ed指针作为在已知支持此类操作的架构上读取和写入可能未对齐的 16、32 和 64 位整数的最佳实现(如x86)。其他架构的后备方案是使用基于memcpy 的实现。
我的理解是 reinterpret_cast 实现表现出未定义的行为,而 clang 的未定义行为清理程序确实会标记它。
令我困惑的是:为什么不直接使用基于 memcpy 的实现呢?我希望除了最坏的编译器之外的所有编译器都使用内部函数来实现这些 memcpy 调用,因为在编译时大小是已知的。事实上,我希望任何现代工具链上的两种实现都具有相同的代码生成。
但是,我也认识到 snappy 是由了解它们的人编写的。所以这让我想知道使用 reinterpret_cast 机制是否还有一些优势,而不是其未定义的行为。不希望性能依赖于编译器的实现质量?还有什么我没有考虑过的?