以前、ポインター キャスト中のアライン アクセスに関する質問をここに投稿しました。要約すると、一部のアーキテクチャでは例外がスローされたり、整列アクセスと比較してパフォーマンスが大幅に低下したりする可能性があるため、完全に移植可能にするために非整列アクセスを使用しないことをお勧めします。
ただし、 1 バイト アラインメントを使用したい場合があります。たとえば、ネットワーク データの転送中に、構造内に余分なパディングを追加したくない場合です。したがって、通常、ここで行われることは次のとおりです。
#pragma pack (push, 1)
struct tTelegram
{
u8 cmd;
u8 index;
u16 addr1_16;
u16 addr2_16;
u8 length_low;
u8 data[1];
};
#pragma pack (pop)
次に、私の質問をすでに知っているかもしれません: 構造体に 1 バイト アラインメントを強制すると、構造体メンバーがアラインされていないため、完全に移植できないということですか? パディングなしと移植性の両方が必要な場合はどうすればよいですか?