Стек на основе выделения памяти - PullRequest
4 голосов
/ 18 января 2010

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

Первое предложение в кавычках говорит, что текущий поток отвечает, а второе предложение в кавычках говорит, что оно сделано автоматически.

Вопрос 1: Это делается автоматически или текущим текущим потоком?

Вопрос 2: Как происходит освобождение памяти в стеке?

Ответы [ 5 ]

2 голосов
/ 18 января 2010

Вопрос 1 : под автоматически очень эффективно ) они означают, что просто сдвигая указатель памяти (обрезая верхнюю часть стека) вся используемая память восстанавливается. Не требуется сложной сборки мусора.

Вопрос 2 : стек - это просто непрерывный кусок памяти, разделенный указателем начала и конца. Все между указателями принадлежит стеку, все, что находится за указателем конца, считается свободной памятью. Вы выделяете и освобождаете память, перемещая указатель конца (верхнюю часть стека). Все гораздо сложнее в куче, где использование памяти фрагментировано.

1 голос
/ 18 января 2010

Вы можете понять больше, посмотрев на пример Стек вызовов (например, в C на многих машинах).

0 голосов
/ 18 января 2010

Стек управляется компилятором.

Куча управляется библиотекой.

0 голосов
/ 18 января 2010

отвечает на вопрос 1: да, он автоматически выполняется сборщиком мусора, так как это демон, работающий всегда с jvm.он проверяет все ссылки и, если они не имеют ссылок (или недоступны), он удаляет их из кучи.

отвечает на вопрос 2: локальные переменные и вызовы методов будут храниться встек, как только они выйдут из области видимости, они будут удалены из стека.

0 голосов
/ 18 января 2010

Вопрос 1: Да.

Вопрос 2: уменьшением указателя стека, т. Е. Обратной операции выделения.

...