我正在寻找一个关于 C++ 中的内存对齐、典型方法、编译器之间的差异和常见陷阱的好的(全面的)文档。只是为了检查我对主题的理解是否正确并学习新东西。
这个问题的灵感来自我对另一个问题的回答,其中我使用了以下构造:
char const buf[1000] = ...;
unsigned int i = *reinterpret_cast<unsigned int*>(buf + shift); // shift can be anything
它被批评为不符合内存对齐规则。您能否解释一下为什么从内存对齐的角度来看这种方法存在缺陷?一个不起作用的例子将受到高度赞赏。我知道这通常是一种不好的方法,但我经常在网络协议实现中使用它,所以它更像是一个实际问题而不是理论问题。
另外请不要在这里提及严格混叠,这是另一个问题。