C ++でのメモリアライメント、一般的なアプローチ、コンパイラ間の違い、および一般的な落とし穴についての優れた(包括的な)ドキュメントを探しています。トピックの私の理解が正しいかどうかを確認し、何か新しいことを学ぶためだけに。
この質問は、次の構成を使用した別の質問に対する私の回答に触発されています。
char const buf[1000] = ...;
unsigned int i = *reinterpret_cast<unsigned int*>(buf + shift); // shift can be anything
これは、メモリアライメントルールに準拠していないと批判されました。ボーナスとして、このアプローチがメモリアライメントの観点から欠陥がある理由を説明できますか?それが機能しない場合の例は高く評価されます。一般的に悪いアプローチだとは思いますが、ネットワークプロトコルの実装でよく使用するので、理論的な質問よりも実用的な質問です。
また、厳密なエイリアシングについては言及しないでください。ここでは別の質問です。