可以解决静态变量的值与堆分配地址的匹配吗?

时间:2017-09-15 13:57:57

标签: c++ pointers memory static heap

我的代码的一些片段在

之下
static const int s_kVar1 = 0;
static const int s_kVar2 = 1;

...

void foo()
{
    MyObject *o = new MyObject();
    // Is it ever possible that (o == &s_kVar1) or (o == &s_kVar2)
}

2 个答案:

答案 0 :(得分:1)

简短的回答是否定的。保证不同的对象具有不同的地址。全局(s_kVar)和动态分配的对象(o)进入不同的内存区域。

P.S。但是,是的,你可以滥用语言来打破这种保证。您可以在同一个内存位置构建两个不同的对象。

答案 1 :(得分:0)

没有。静态变量存储在.BSS或.DATA段中,具体取决于它们是初始化还是未初始化(0初始化)。在你的情况下,

static const int s_kVar1 = 0;将进入.BSS和 static const int s_kVar2 = 1;将进入.DATA

堆用于动态分配。

BTW我不明白为什么你在文件范围使用静态const。 const默认使内部链接,全局变量具有静态生命周期。当然,除非您使用C,否则我可以看到它有用。