Вы действительно не «чистый» стек. Все, что происходит, - это указатель стека сбрасывается на верхнюю часть хранилища стека вызывающих программ.
Любая последующая функция вызывается из этой программы будет дан тот же указатель стека вашей программы receieved (включая любые значения, установленных по программе - вот почему его важно intialise автоматического хранения)
Conversly, когда ваш программа вызывает функцию, вызываемой функции будет задан указатель стека сразу после последней части вашего стека, и, если вы вызовете несколько функций, все они будут иметь один и тот же указатель стека.
Для уточнения C C++ программа поддерживает три типа распределения памяти: -
"статический", который effectivly глобальный к блоку компиляции. При запуске основной программы выделяется подходящий кусок хранилища, и каждому «статическому» выделяется адрес в этом куске неподвижности. Используется до завершения основной программы.
«heap» это коллекция областей хранения, управляемых «malloc», с небольшой помощью от базовой операционной системы. Большинство (но не все!) «Новые» объекты так же выделяют память.
Тогда «автоматическое» хранилище (которое по умолчанию) использует стек. Опять же, это довольно большая смежная область хранения, выделенная в начале вашей основной программы. Любые автоматические переменные, используемые «основным», будут распределены на начало стека, а указатель стека увеличится, чтобы указать на слово после последней последней переменной. Когда первая функция вызывается, она выделяет свои автоматические переменные, начиная с текущего указателя стека, и указатель stck устанавливается на слово после конца его последней переменной, если если вызывает другие функции, то процесс повторяется. Когда функция заканчивается, указатель стека сбрасывается на любое значение, которое он имел при вызове функции.
Таким образом, хранилище постоянно используется повторно без необходимости использования каких-либо mallocs или frees, и это упрощает реализацию рекурсивных функций, поскольку каждый вызов будет иметь свою собственную часть для стека (до тех пор, пока не закончится стопка!).
ОК, но если я скажу, что (m1.high_ [0]
Model
Помните, что любая память, которую вы выделили с помощью 'new', по-прежнему будет рассмотрена, если вы явно не удалите ее перед' return'. –
Нет. False или true не диктует факт, если стек должен быть очищен или нет. возврат из функции включает очистку кадра стека вызываемой функции независимо от значения, возвращаемого функцией. – Chubsdad