下面两个例子编译后会占用相同的内存吗?
Would the two following examples take up equal memory after compiling?
请帮助我理解这个概念:
如果两者都声明并初始化,编译后哪个会占用更多内存?
struct V
{
int a, b;
};
struct X
{
struct V v;
int N;
};
或:
struct X
{
int a, b, c;
};
结构填充规则:
只有当一个结构成员后面跟着一个对对齐要求较大的成员或在结构的末尾时才插入填充。
最后一个成员用所需的字节数填充,以便结构的总大小应该是任何结构成员的最大对齐的倍数。
这表明两者将占用相同的内存 space,每个 12 字节,假设 int
的大小为 4
字节。原因是两种情况下都没有填充。
struct X 的两种变体占用的内存量相同,毕竟它们只包含三个整数,并且嵌套结构在大小方面不会影响其成员数据的内存布局。
本例中的结构只是语法糖,用于按特定顺序排列其成员,不会引入额外的开销。
如果 int 之间没有额外的填充,两个结构将消耗 3 * sizeof(int) 字节。
我的常识告诉我,在这两种情况下,程序将分配相同数量的内存(3 个整数)。
归根结底,C 结构体不过是一种帮助开发人员组织变量和提高代码可读性的方法。编译后程序不关心结构或代码组织,而是关心变量(内存)和操作(指令)。
请帮助我理解这个概念:
如果两者都声明并初始化,编译后哪个会占用更多内存?
struct V
{
int a, b;
};
struct X
{
struct V v;
int N;
};
或:
struct X
{
int a, b, c;
};
结构填充规则:
只有当一个结构成员后面跟着一个对对齐要求较大的成员或在结构的末尾时才插入填充。
最后一个成员用所需的字节数填充,以便结构的总大小应该是任何结构成员的最大对齐的倍数。
这表明两者将占用相同的内存 space,每个 12 字节,假设 int
的大小为 4
字节。原因是两种情况下都没有填充。
struct X 的两种变体占用的内存量相同,毕竟它们只包含三个整数,并且嵌套结构在大小方面不会影响其成员数据的内存布局。
本例中的结构只是语法糖,用于按特定顺序排列其成员,不会引入额外的开销。
如果 int 之间没有额外的填充,两个结构将消耗 3 * sizeof(int) 字节。
我的常识告诉我,在这两种情况下,程序将分配相同数量的内存(3 个整数)。
归根结底,C 结构体不过是一种帮助开发人员组织变量和提高代码可读性的方法。编译后程序不关心结构或代码组织,而是关心变量(内存)和操作(指令)。