Почему куча требует дополнительной памяти для управления, а стек - нет? - PullRequest
0 голосов
/ 06 апреля 2011

Я прочитал статью, в которой говорится, что память, выделенная в куче, требует дополнительной памяти для управления.

Скажем, если мы попытаемся allocate 200 байт, для управления памятью будет выделено дополнительно 8 байт.

Но стеку не требуется это дополнительное пространство.

Я знаю адреса стека от high => low, но heap low => high, но почему для кучи требуется дополнительное пространство?

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Переменные стека выделяются как часть кадра стека, который уходит на ret. Это на самом деле не на 100% бесплатно; есть регистр, который отслеживает, где начинается кадр стека (%ebp на x86), и его нужно сохранить при входе в функцию и восстановить перед выходом; но это для каждой функции, а не для распределения, и отслеживание указателя базы кадра полезно не только для этого (в частности, оно используется для разматывания стека во время обработки исключений), так что это что-то непомерное.

0 голосов
/ 06 апреля 2011

Стек проще в управлении (вы всегда выделяете / освобождает сверху), и стек уже управляется указателем стека. Вот почему требуется меньше «административного пространства», чем куча, где вы в основном можете делать что-либо.

...