私は、もはや会社で働いていないスーパースターによって開発されたいくつかのレガシーコードを通過しています。彼のコードを通して、彼は構造体を詰め込んだ。しかし、私は彼が1要素だけで構造メンバーのためにこれをやっているのを見る。私は、彼がこのようにして何か利点があるかどうかはわかりません。何か不足していますか?__attribute __((packed))は、1つの要素しかない構造体にあります
サンプルコード:
struct A {
uint32_t a __attribute__((packed));
};
パッキング構造体は当然のことではありません。あなたは実行時間のためにメモリ消費量を取引していますが、メモリが逼迫しているシステムでない限り、通常は非常に悪い取引です。 –
@Cody Greyあなたのコメントにほとんど同意します。しかし、正確なレイアウトを知る必要がある場合は、構造体をパックすることが理にかなっています。たとえば、ネットワーク経由で転送する必要があり、反対側で展開/解析する必要がある場合などです。 –
@ jesperおそらく、私はそれが非常に説得力があるとは思わない。パッキングではエンディアンの問題が発生し、移植性があまり良くありません。また、ネットワークを介してデータを転送する場合は、ある種のプロトコルが必要になります。したがって、プロトコルではその違いを処理する必要があります。おそらく、構造体をディスクにシリアル化する*バイナリ互換性について考えているでしょうか?これはポータブルではないという定義であり、私は良い考えではないとも言います。少なくとも、APIを設計しているわけではありません。明らかに、サードパーティのAPIとの互換性の理由から、コンパイラ拡張が存在しなければなりません。 –