c - 下面两个例子编译后会占用相同的内存吗?

标签 c memory struct compilation int

请帮助我理解这个概念:

如果两者都声明和初始化,编译后哪个会占用更多内存?

struct V
{
    int a, b;
};

struct X
{
    struct V v;
    int N;
};

或:

struct X 
{
    int a, b, c;
};

最佳答案

结构填充规则:

  • 只有当一个结构成员后面跟着一个对对齐要求更大的成员或在结构的末尾时,才会插入填充。

  • 最后一个成员用所需的字节数填充,以便结构的总大小应该是任何结构成员的最大对齐的倍数。

这表明两者将占用相同的内存空间,每个 12 字节,假设 int 的大小为 4 字节。原因是两种情况下都没有填充。

关于c - 下面两个例子编译后会占用相同的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29652386/

相关文章:

c - 如何通过将各自的部分放在不同的位置来链接两个目标文件?

c - getchar() 函数获取 Enter 作为输入

python - 在程序使用太多内存之前停止程序

C动态数组;无法删除

c - 使用结构时,如何将以下汇编代码从编译器翻译成 C?

c++ - GCC 如何处理内置函数

c - OpenGL-4 : How to create a circle and circle of lines using VOA

c - C 中带有函数的 realloc 结构

struct 中的 Golang channel 表现不同,在创建 struct 时传递它,在创建后通过函数传递

c - struct-C 中字符串的二维数组