如何计算C中结构的大小?

时间:2012-10-20 08:25:49

标签: c++ c struct

我有以下Structs

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

我认为大小必须大于sizeof(整数)。

但令人困惑的是如何计算这个结构的整体大小。

那么如何计算尺寸?

我的意思是我想手动计算,而不是用电脑计算......

6 个答案:

答案 0 :(得分:5)

尺寸至少为sizeof(int) + sizeof(struct node *) + sizeof(struct node *)。但它可能更多,因为如果希望编译器允许将填充字节添加到您的结构中。

sizeof(int)sizeof(struct node*)的大小取决于您的系统。如果你有一个32位系统,它们可能分别是4个字节,如果你有64位系统,它们可能是8个字节。但实际上唯一可以确定的方法是使用编译器打印出大小。

答案 1 :(得分:3)

如果您正在谈论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->值的当前值,依此类推。

答案 2 :(得分:1)

sizeof (struct node)是结构的字节大小。

相当于:

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

成员之间和结构末尾的填充大小是实现定义的。

答案 3 :(得分:1)

您无法手动计算确切尺寸。你可以弄清楚的是,它至少是其成员大小的总和。

即。在这种情况下,无论这些大小在您的系统上,它至少都是sizeof(int) + 2 * sizeof(struct node *)

由于paddingalignment,它可能会大于此最小尺寸。

答案 4 :(得分:1)

通常,结构的大小是每个成员字段的大小的增加。但编译器可能会为padding / align members添加一些额外的字节。

所以在你的情况下,

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)

根据您选择的编译器/平台,一般准则可能会有所不同。

答案 5 :(得分: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();
  }
}

请记住,此大小可能不等于为结构

分配的内存大小