vars地址的解释是什么

What is explanation of vars' addresses

代码如下:

    #include <iostream>

    using namespace std;

    struct S {};

    int main() {
      S s1, s2;
      char c1, c2;
      cout << (uintptr_t)&s1 << '\n' << (uintptr_t)&s2 << '\n' << (uintptr_t)&c1 << '\n' << (uintptr_t)&c2 << '\n';
    }

输出示例:

19920899
19920887
19920875
19920863

我猜测每个下一个 var 都有更大的地址和 1 个字节的差异,但差异是 12 个字节并且地址正在减少。

由您compiler/implementation决定填充,决定堆栈增长的方向,决定调试数据是否应该嵌入变量。

C++ 对这个程序的输出没有这样的要求。 “为什么是 12 个字节”取决于您选择的编译器、目标体系结构和使用的编译器标志。