распределение переменных в вопросе вложенного цикла - PullRequest
2 голосов
/ 15 июля 2009

поскольку obj, объект playingCard создается внутри вложенного цикла for, означает ли это, что после завершения второго цикла for объект obj каждый раз освобождается из стека?

и небольшой побочный вопрос, компилятор использует стек (аналогично рекурсии) для отслеживания циклов и вложенных циклов?

</p>

    for(int c = 0;c<nElems;c++) {
    for(int z = c + 1;z<nElems;z++) {
            playingCard obj;


        }
    }

Ответы [ 4 ]

5 голосов
/ 15 июля 2009

Он создается и разбирается на каждой итерации.

Однако в стеке концепция распределения (по крайней мере для VS и GCC) более туманная. Поскольку стек является непрерывным блоком памяти, предварительно управляемым компилятором, нет реальной концепции распределения и освобождения таким образом, как для выделения кучи (new / delete или malloc / free). Компилятор использует нужную ему память в стеке и просто откатывает указатель позже.

3 голосов
/ 15 июля 2009

Область объекта находится внутри заключенных в скобки [будь то функция или петля]. поэтому, как только заканчивается область действия, вызывается деструктор объекта и объект освобождается.

Что касается вашего второго вопроса, то от компилятора зависит поддержка собственной стратегии обработки циклов и отслеживания объектов.

2 голосов
/ 15 июля 2009

Объекты в стеке выделяются или освобождаются один раз (даже если они вложены в циклы).
Однако конструкторы и деструкторы вызываются на каждой итерации.

2 голосов
/ 15 июля 2009

Он распределяется / освобождается на каждой итерации вашего внутреннего цикла.

Мне непонятно с вашей стороны, но компилятор использует стек для отслеживания всех локальных переменных, которые он не может просто сжать в регистры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...