4

C のパディングの量はstruct、標準またはコンパイラおよび/またはターゲット アーキテクチャに依存して明確に定義されています。私は基準に答えを見つけることができませんでした。

4

2 に答える 2

7

これは実装定義です。C99 標準のセクション 6.7.2.1 から:

...構造体または共用体オブジェクトの各非ビットフィールドメンバーは、その型に適した実装定義の方法で整列されます...

...構造体オブジェクト内に名前のないパディングがある場合がありますが、先頭にはありません...

コンパイラは通常、基盤となるハードウェアに適した配置を選択します (メモリから読みやすいように配置するなど)。

于 2012-04-29T18:48:10.530 に答える
1

パディングは、コードのコンパイルに使用する特定のコンパイラを意味する実装によって決定されます。

特定のプラットフォームでは、どのパディングが使用されるかについて合意された規則があります。これにより、異なるコンパイラでコンパイルされたコードでバイナリ相互運用が可能になります。

したがって、理論的にはコンパイラが異なれば選択も異なる可能性がありますが、すべてのコードが 1 つのプロセス内で実行されている限り、異なるパディング ルールが問題になることはめったにありません。一方、structネットワーク経由で送信するデータにレイアウトを使用する場合は、必ず問題が発生します。送信されるデータにバイナリ レイアウト構造体を使用しないでください。

于 2012-04-29T18:49:59.653 に答える