1

私は次の構造体を持っています

struct node{
    int value;
    struct node *next;
    struct node *prev;
};

そして、サイズは sizeof(integer) よりも大きくなければならないと思います。

しかし、この構造体全体のサイズを計算する方法はわかりにくいです。

では、サイズを計算する方法は?

つまり、コンピューターではなく手で手動で計算したいのです...

4

6 に答える 6

6

サイズは少なくともsizeof(int) + sizeof(struct node *) + sizeof(struct node *)です。ただし、必要に応じてコンパイラがパディングバイトを構造に追加できるため、それ以上になる場合があります。

大きsizeof(int)sizeof(struct node*)はシステムによって異なります。32 ビット システムの場合はそれぞれ 4 バイトになる可能性が高く、64 ビット システムの場合は 8 バイトになる可能性があります。しかし、確実に知る唯一の方法は、コンパイラを使用してサイズを出力することです。

于 2012-10-20T08:31:20.877 に答える
5

32 ビット アプリケーションについて話している場合、整数とポインターは 4 バイトです。したがって、構造体のサイズは 12 バイトです。

struct node{
    int value;         // 0x0 - 0x4
    struct node *next; // 0x4 - 0x8
    struct node *prev; // 0x8 - 0xC
};

組み立て:

struct [0xDEADBEEF] {
    int 0x0;
    struct node *0x4;
    struct node *0x8;
};

補足事項[[0xDEADBEEF]+0x0] で読み取られるメモリ ポインターは、node->value などの現在の値を返します。

于 2012-10-20T08:37:35.737 に答える
4

sizeof (struct node)構造体のバイト単位のサイズです。

これは以下と同等です:

=    sizeof (int)
  +  potential unnamed padding1
  +  sizeof (struct node *)
  +  potential unnamed padding2
  +  sizeof (struct node *)
  +  potential unnamed padding3

メンバー間および構造体の末尾のパディングのサイズは実装定義です。

于 2012-10-20T08:26:20.317 に答える
3

通常、構造体のサイズは各メンバ フィールドのサイズの加算です。ただし、コンパイラは、メンバーを適切にパディング/整列するために、いくつかの余分なバイトを追加する場合があります。

だからあなたの場合、

sizeof(struct node) = sizeof(int) + sizeof(struct node *) + sizeof(struct node *)
                 12 = 4 + 4 + 4  (on 32-bit)
                 20 = 4 + 8 + 8  (on 64-bit)

これは一般的なガイドラインであり、選択したコンパイラ/プラットフォームによって異なる場合があります。

于 2012-10-20T08:33:49.287 に答える
1

c++: 正しい方法は、int plain_size()必要な構造体ごとにメソッドを初期化することです。

struct anotherstruct {
  ...
  static int plain_size(){...};
}

struct struct1 {
  int a;
  int b;
  anotherstruct c;

  static int plain_size() {
    return sizeof(a)+sizeof(b)+anotherstruct::plain_size();
  }
}

このサイズは、構造体に割り当てられたメモリ サイズと等しくない可能性があることに注意してください。

于 2012-10-20T09:46:22.787 に答える
1

手で正確なサイズを計算することはできません。あなたが理解できるのは、少なくともそのメンバーのサイズの合計になるということだけです。

つまり、この場合sizeof(int) + 2 * sizeof(struct node *)、システム上のこれらのサイズが何であれ、少なくとも になります。

パディングアラインメントのために、この最小サイズよりも大きくなる場合があります。

于 2012-10-20T08:30:59.970 に答える