以下代码包含 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字节是"自然"对齐(。