Я прочитал много постов посвященных организации памяти, но мне по прежнему не ясно зачем вообще нужна куча? Почему вместо нее не используется какой нибудь глобальный стек или что-то вроде того?
Ответ
Думайте о куче как о структуре, из которой можно в любой момент попросить кусок памяти, и в которую можно в любой момент эту память вернуть.
Со стеком такое не получится: в нём вы можете вернуть объект назад только после того, как все предыдущие объекты вернулись.
Например, в гипотетическом языке, в котором есть лишь стек, вот такая конструкция:
object* function()
{
aux_object* ao = new aux_object();
object* o = new object();
o -> copySettingsFrom(ao);
delete ao;
return o;
}
была бы невозможна, потому что освободить ao нельзя было бы до освобождения o!
Комментариев нет:
Отправить комментарий