gpt4 book ai didi

c++ - 在哪里可以找到有关跨不同平台/编译器的 C++ 内存对齐的文档?

转载 作者:可可西里 更新时间:2023-11-01 16:37:50 26 4
gpt4 key购买 nike

我正在寻找有关 C++ 中的内存对齐、典型方法、编译器之间的差异以及常见陷阱的优秀(综合)文档。只是为了检查我对主题的理解是否正确并学习新知识。

这个问题的灵感来自于我对另一个问题的回答,其中我使用了以下结构:

char const buf[1000] = ...;
unsigned int i = *reinterpret_cast<unsigned int*>(buf + shift); // shift can be anything

它被批评为不符合内存对齐规则。您能否从内存对齐的角度解释为什么这种方法存在缺陷?一个不起作用的例子将不胜感激。我知道这通常是一种不好的方法,但我经常在网络协议(protocol)实现中使用它,所以它更像是一个实际问题而不是理论问题。

另外请不要在这里提到严格别名,这是另一个问题。

最佳答案

char 的非堆分配数组对其对齐方式没有特定要求。因此,您的一千个字符的缓冲区可能位于奇数偏移量上。尝试从该偏移量读取 int(重新解释为明显的 int 指针)会导致性能不佳,如果编译器不将其拆分为单独的 read+,甚至会导致某些硬件出现总线错误位掩码操作。

char 的堆分配数组保证适当对齐以存储任何对象类型,因此这始终是一个选项。

对于非基于堆的存储,使用 boost::aligned_storage 确保空间正确对齐以供一般使用。

关于c++ - 在哪里可以找到有关跨不同平台/编译器的 C++ 内存对齐的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7320766/

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