我测试了以下代码:
#include <iostream>
class Test {
public:
Test(const char *name) :name(name) { std::cout << name << ": constructing " << this << std::endl; }
~Test() { std::cout << name << ": destructing " << this << std::endl; }
private:
const char *name;
};
Test global("global");
Test global2("global2");
int main() {}
令我惊讶的是,输出结果是
global: constructing 0x104f84000
global2: constructing 0x104f84008
global2: destructing 0x104f84008
global: destructing 0x104f84000
但是据我所知,堆变量的地址是一一往下走的。为什么在全局变量的情况下会增加?
如果你看到任何进程的内存布局,全局变量都存储在进程内存的数据段中。在任何进程中,最低地址都是代码段,它包含进程中要执行的指令。接下来是数据段,它包含所有全局变量。所以,在这里你可以看到全局变量的地址正在增加。