正しい答えを見つけるためにquestiongを正しく検索していない可能性がありますので、私が何をしようとしているのかを簡単に教えてくださいどのような質問を私は答えを見つけることを求めている必要があります。x86ベースのプラットフォーム上でLinuxを使用しているC言語の構造を持つハードウェアテーブルにアクセスする
私はそれにメモリのチャンクを持つハードウェアデバイスを持っています。メモリ内の16バイトごとに、HWベースのリンクされたコントローラへのエントリが表示されます。そして、私は多くの多くのエントリのために十分なメモリを持っています。
以下のような構造で各エントリを表現したいと思います。
struct entry_desc {
/* Address */
uint64_t addr;
/* Length. */
uint32_t len;
/* Some flags. */
uint16_t flags;
/* Next pointer */
uint16_t next;
};
構造内の要素を定義した順序が同じ順序でメモリにマップされる保証はありますか?
リトルエンディアン性を前提とすると、メモリオフセット0のLSB "addr"とメモリオフセット7の "addr"のMSBで、 "addr"はバイト0と7の間の最下位メモリアドレスに配置されます。 あれは正しいですか?それが他のコンパイラではなく、一部のコンパイラで本当であるかどうかわかります。
Cは、構造体のメンバの順序を保証しますが、それはサイズ/アラインメントについては何も言いません。そして、各structメンバーの後に任意のパディングを許します。 – melpomene
*使用できるパディングやアライメントを制御する言語コンパイラ固有の拡張機能があります。それ以外の場合は、静的アサーションを使用して、実際の配置を目的の配置と照合することができます。 –