我有以下Structs
struct node{
int value;
struct node *next;
struct node *prev;
};
我认为大小必须大于sizeof(整数)。
但令人困惑的是如何计算这个结构的整体大小。
那么如何计算尺寸?
我的意思是我想手动计算,而不是用电脑计算......
答案 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 *)
。
答案 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();
}
}
请记住,此大小可能不等于为结构
分配的内存大小