Когда функция рекурсивно вызывает себя и сохраняет предыдущее состояние в стеке, можем ли мы вызвать память, выделенную во время выполнения? Эта память стека вызовов не выделяется во время компиляции, поэтому можно ли с уверенностью заключить, что мы можем выделить память стека во время выполнения?
Меня немного смущают материалы в Интернете, в которых говорится, что распределение памяти во время выполнения — это другое название динамического распределения памяти, что, на мой взгляд, является чрезмерным упрощением.
🤔 А знаете ли вы, что...
C разработан Деннисом Ритчи в компании Bell Labs.
Память стека всегда выделяется во время выполнения, но в языке C конкретно не упоминается, как и где выполняется выделение. И, следовательно, C не позволяет нам напрямую манипулировать стеком, и это хорошо.
Некоторые нестандартные функции, такие как alloca
, могут позволять выделение стека. Также весьма вероятно, что массивы переменной длины (VLA) размещаются в стеке. В любом случае библиотека или компилятор обрабатывают выделение/освобождение, как и в случае с любой стековой памятью.
«Выделение памяти во время выполнения» и даже «динамическое выделение памяти» не являются формальными терминами, поэтому они могут означать что угодно. Хотя динамическое распределение памяти является общепринятым де-факто стандартным названием для выделенного хранилища/свободного хранилища/распределения кучи... или как-то еще это можно назвать. Формальный термин, используемый в стандарте C, — выделенная память.