为什么每次输入相同的功能时内存地址都相同?

时间:2019-05-03 15:02:37

标签: qt visual-c++ visual-studio-2013

我正在调试一段代码。每次调试该函数时,我发现数据存储地址是相同的。

我试图解释它。令我感到困惑的是,每当我退出该功能时,分配在堆栈上的内存就被释放了,为什么会一样?

QList<int> PixMapVsImage::getIntList()
{
    QList<int> list;
    list << 1 << 2;
    qDebug() << (&list) ;
    qDebug() << (&list.at(0));
    return list;
}

stack addresses

我真的不知道为什么内存分配地址相同吗?所以我真的不知道实际结果是什么。

1 个答案:

答案 0 :(得分:1)

基本上,局部变量的地址反映了调用堆栈的深度。如果每次都以相同的顺序调用该函数,则其局部变量位于同一位置就不足为奇了。

现在,列表中的元素可能已分配在堆上。典型的堆实现将维护最近释放的块的列表(free list)。如果您从堆中分配N个字节,然后对其进行分配,然后再次分配N个字节,则很有可能您将返回相同的块,而不是空闲列表的顶部。这可能是您观察到的。