2010-01-18 3 views
4

С ссылкой на Stack Based Memory Allocation указано: «... каждый поток имеет зарезервированную область памяти, называемую ее стеком. Когда функция выполняется, она может добавлять некоторые свои данные состояния в вершина стека, когда функция выходит она отвечает за удаление этих данных из стека « и » ... что память на стеке автоматически, и очень эффективно, отвоеванные при выходе из функции»Распределение памяти на основе стека

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

Вопрос 1: Выполняется автоматически или текущей текущей резьбой?

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

ответ

2

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

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

0

Вопрос 1: Да.

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

+0

Да для текущей рабочей резьбы? –

+0

@Sri: Каждый поток имеет свой собственный стек. –

+0

Очевидно, что если поток не работает, он не выделяет и не освобождает память. – MSalters

-1

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

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

+1

Выделение и распределение стека не требует сборщика мусора. Составители делали это просто отлично на протяжении десятилетий, прежде чем JVM приходила;) –

+0

Я знаю, что освобождение и распределение стека не требует сборщика мусора. – GuruKulki

0

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

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

+0

Куча управляется библиотекой? Встроенные библиотеки (любого) языка программирования? Если да, вы можете указать имя библиотеки вашего известного языка. –

1

Дополнительную информацию можно найти на примере Call Stack (например, на C на многих машинах).

Смежные вопросы