私は、C++でのメモリアライメント、典型的なアプローチ、コンパイラ間の違い、よくある落とし穴に関する良い(包括的な)ドキュメントを探しています。トピックの理解が正しいかどうかを確認し、新しいことを学ぶだけです。この質問は、私は構文次使用される別の質問に対する私の答えに触発され異なるプラットフォーム/コンパイラ間でのC++メモリの配置に関するドキュメントはどこにありますか?
:
char const buf[1000] = ...;
unsigned int i = *reinterpret_cast<unsigned int*>(buf + shift); // shift can be anything
これは、メモリのアライメント規則に準拠していないとして批判されました。このアプローチがメモリアライメントの観点から欠けている理由を説明してください。それが動作しない場合の例は高く評価されます。私はそれが一般的に悪いアプローチであることを知っていますが、私はネットワークプロトコルの実装でそれを使うことが多いので、理論的なものよりも実践的な質問です。
はまた、別の質問のためだ、ここでは厳しいエイリアシングを言及しないでください。 char
の
シフトはシステムのワードサイズの倍数ではありませんか?あなたは、単語の途中でポインタを取得しようとしたことで批判されていた可能性があります(32ビットワードの途中で)、これは変です。 –
シフトが4の倍数であっても、 'buf'が4の倍数のアドレスで開始するという保証はありません – nos
' shift'は何でもできます質問を更新しました –