1

もっとはっきりさせておきますが、内部構造を埋めたいのですが、どうすればよいですか。例-

どこにstruct bありますか

struct b{
  u_int32_t aa;
  u_int32_t bb;
};

struct c{
  u_int64_t cc;
};

現在、私のコンパイラは、構造体dの構造体bとcの間に8バイトのパディングを行っています。だから、どうすればそれを取り除くことができますか?

願わくば、今ははっきりしている。誰かが私に答えを与えることができますか?

構造d{

struct b;

struct c; //I want to make this structure a padded one, how to go about it?

struct c;

}

誰かがこれを手伝ってくれませんか。

4

2 に答える 2

2

タグから、私はあなたがLinuxを使用していると推測します。GCCは次の属性を認識します。

__attribute__((packed))

これは、構造体の宣言の前または後に記述して、パディングを削除できます。

于 2012-08-03T04:29:42.770 に答える
0

実際のところ、 bとcの間にパディングは配置されていません。

理由を見てみましょう、

すべてu_int32_t32ビット=>4バイトです。これで、のサイズはstruct b8バイトになります(aaのために4バイト、bbのために4バイト)。また、のサイズもstruct c8バイトです。

したがって、が作成されると、とはstruct d両方とも順番に配置されます。次は前の直後に配置されます。struct bstruct cstruct cstruct c

しかし、最後との終わりの後に8バイトのパディングが あります。これは、複数をメモリに配置する場合、2番目は32ではなく24のメモリ位置から開始するためです(これは便利です)。struct cstruct dstruct dstruct d

詳細情報が必要な場合:C構造体パッキングの失われた芸術

于 2017-06-21T09:36:16.383 に答える