我有以下结构
struct node{
int value;
struct node *next;
struct node *prev;
};
而且我认为大小必须大于 sizeof(integer)。
但是如何计算这个结构的整体大小令人困惑。
那么如何计算尺寸呢?
我的意思是我想手动计算它,而不是通过计算机......
大小至少是sizeof(int) + sizeof(struct node *) + sizeof(struct node *)
. 但它可能更多,因为编译器可以根据需要向您的结构添加填充字节。
有多大sizeof(int)
和sizeof(struct node*)
有多大取决于您的系统。如果您有一个 32 位系统,它们可能每个是 4 个字节,或者如果您有一个 64 位系统,它们可能是 8 个字节。但真正确定的唯一方法是使用编译器打印出大小。
如果您谈论的是 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 的当前值,依此类推。
sizeof (struct node)
是结构的字节大小。
它相当于:
= sizeof (int)
+ potential unnamed padding1
+ sizeof (struct node *)
+ potential unnamed padding2
+ sizeof (struct node *)
+ potential unnamed padding3
成员之间和结构末尾的填充大小由实现定义。
通常,结构的大小是每个成员字段的大小相加。但是编译器可能会适当地为填充/对齐成员添加一些额外的字节。
所以在你的情况下,
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)
这是一般指南,可能会因您选择的编译器/平台而异。
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();
}
}
请记住,此大小可能不等于为结构分配的内存大小