如何计算C中的结构大小
How to calculate size of a struct in C?
我有以下结构
struct node{
int value;
struct node *next;
struct node *prev;
};
我认为大小必须大于sizeof(整数)。
,但它使如何计算此结构的整体大小感到困惑。
那么如何削弱大小?
我的意思是我想手动手动计算它,而不是通过计算机...
大小至少为 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上读取将返回节点 ->值的当前值等。
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)
这是一般指南可能会根据您选择的编译器/平台而有所不同。
您无法手动计算确切的大小。您只能确定它至少是其成员大小的总和。
即。在这种情况下,无论系统上这些尺寸如何,它至少是sizeof(int) + 2 * sizeof(struct node *)
。
由于填充,对齐,它可能大于此最小尺寸。
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();
}
}
请记住,这种大小可能不等于分配的结构的内存大小
- 如何计算结构的哈希
- 使用结构数组计算文本文件中单词的出现次数C++
- 从右到左计算当前索引中的数据结构中的元素数,并打印每个元素的计数
- 如何计算结构阵列内的平均值
- 计算地图结构的哈希
- 在包含预计算结果或可计算结果的结构中使用联合
- 使用指针和结构C 计算两个点之间的距离,分割故障问题
- 如何在编译时计算c++11中的结构填充
- 通过更改代码格式来计算结构向量中包含的双精度变量的平均值的不同结果?
- 如何计算C中的结构大小
- 如何计算递归结构
- 准确计算编译器在结构中添加的填充
- 一种按排序顺序保持元素的数据结构,支持快速插入和计算连续元素之间的最大差异
- 使用复合数据结构的最近点计算
- 一个C++结构,它可以提高可读性,计算结果为零,但不是宏
- 用于选择计算机组的数据结构
- 在高性能计算中更好的做法是:将数据结构传递到一个函数或一组变量中
- 如何编写递归函数来计算图形数据结构中的最短路径
- 用户定义的结构/类计算
- 在哪些体系结构上计算无效指针不安全