2016-04-25 19 views
-1

構造体のパディングの仕組みや、ダミーバイトのデータを埋め込む必要があることを知っています。パッディングは、同じデータを得るためのサイクル数を減らすことによって、h/wパフォーマンスを向上させます。 一方、パッキングでは、データをお互いに並べることができるため、CPUはデータ全体を完全にフェッチするために複数のサイクルを使用する必要があります。 したがって、パフォーマンスを低下させていますが、梱包の必要性は何ですか? 梱包が必要な状況を提案してください。 h/wの単語の長さを4バイトと仮定しています。構造体の埋め込みとパッキング

おかげ&よろしく アミット・クマール

答えて

2

それはしばしばスペース/メモリとCPU時間との間のトレードオフです。私は、組み込みコードで構造体パッキングを頻繁に使用してサイズを縮小し、使用するために余分なマスク命令が必要であることをよく認識しています。

データ構造がパックド構造体で定義されていると、明示的に(宣言的に)データ構造を見ることができるデータのシリアライズ/デシリアライゼーションにも役立ちます。 これは、しばしば議論の余地があります。memcpy - バッファとデータ構造の間で直接関係することは多くの人にとって悪い習慣とみなされます。

1

「パッキング」とは、非標準のプラグマまたはアトリビュート(Gccの__attribute__((packed))など)を使用してパディングを削除することを意味します。これを行う主な理由は2つあります。

  1. メモリ割り当てを減らします。多数のオブジェクトを割り当てる場合、パディングによる余分な割り当てが重要になることがあります。
  2. インメモリレイアウトをディスク上のレイアウト(特定のファイル形式を扱う場合など)または特定のプロトコルに反映させる。これにより、各フィールドとは別に処理するのではなく、構造オブジェクトを直接読み書きすることができます。 (個々のフィールド内でのバイト順序は依然として懸念されるかもしれません)。

一般的に、この方法はポータブルではないため、非常に正当な理由がない限り避けるべきです。

多くの場合、データ構造を再編成することによって必要なパディングを減らすことができます。最も大きいメンバーを先に配置し、後続のメンバーをサイズの小さい順に配置します。

+0

「パッキング」は、通常、構造の場合と同様にオブジェクトをグループ化することを指します。私はそれが意味することをかなり理解していませんでした。 – sjsam

+0

あなたのお返事ありがとうございます。 –

関連する問題