Почему адрес памяти одинаков каждый раз, когда вы вводите одну и ту же функцию? - PullRequest
0 голосов
/ 03 мая 2019

Я отлаживаю фрагмент кода. Каждый раз, когда я выполняю отладку в этой функции, я обнаруживаю, что адрес памяти данных одинаков.

Я пытался объяснить это.Меня смущает то, что каждый раз, когда я выпрыгиваю из этой функции, память, выделенная в стеке, освобождается, так почему же она одинакова?

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

stack addresses

Неужели я не знаю, почему адрес выделения памяти такой же?Так что я действительно не знаю, каков реальный результат.

1 Ответ

1 голос
/ 04 мая 2019

По сути, адрес локальной переменной отражает глубину стека вызовов. Если функция вызывается в одной и той же последовательности каждый раз, то неудивительно, что ее локальные переменные попадают в одно и то же место.

Теперь элементы списка, вероятно, размещены в куче. Типичная реализация кучи будет поддерживать список недавно освобожденных блоков ( свободный список ). Если вы выделите N байтов из кучи, затем освободите их, а затем снова выделите N байтов, велики шансы, что вы получите тот же блок обратно, вне верхней части свободного списка. Это может быть тем, что вы наблюдаете.

...