结构/类是否以某种方式影响内存填充



以下代码包含 2 个问题:

struct Value
{
  int value
}
void main()
{
  Value v1;
  Value v2;
  int a;
  int b;
  return 0;
}

1(为什么我的变量的内存地址向下存储在函数中?
v1 -> 0x00007fff5fbff758
v2 -> 0x00007fff5fbff750

但是例如在我的结构中,它们存储在另一个方向?例如,如果值有另一个变量 int value_2;

v1.值 -> 0x00007fff5fbff750
v2.value_2 -> 0x00007fff5fbff754

2(为什么 int a 和 int b 在内存中是连续的,为什么 v1 和 v2 在内存中不是连续的。

有没有

我不知道的对齐方式?

编辑:

一年后再回到这个问题。在重新学习了组装的基础知识之后,现在这更有意义了。我对任何对底层布局等感兴趣的人的建议。学会C++后重温asm,真的很有趣。

1(是编译器决定变量的存储顺序。可能没有特别的原因,尽管在函数中变量以下推顺序存储在堆栈上,因此如果首先推送 v1,则 v2 "低于"v1 是有意义的。

相反,结构中的顺序必须遵循声明(它在 C 规范中的某个地方(。原因是结构可能会覆盖数组或其他内存映射区域,您希望确保变量按特定顺序和对齐方式排列。

2(不确定,但编译器可能决定将结构与8字节边界对齐以进行优化(您似乎使用64位编译器,因此8字节是"自然"对齐(。

最新更新