Можем ли мы выделить память стека во время выполнения?

Когда функция рекурсивно вызывает себя и сохраняет предыдущее состояние в стеке, можем ли мы вызвать память, выделенную во время выполнения? Эта память стека вызовов не выделяется во время компиляции, поэтому можно ли с уверенностью заключить, что мы можем выделить память стека во время выполнения?

Меня немного смущают материалы в Интернете, в которых говорится, что распределение памяти во время выполнения — это другое название динамического распределения памяти, что, на мой взгляд, является чрезмерным упрощением.

🤔 А знаете ли вы, что...
C разработан Деннисом Ритчи в компании Bell Labs.


69
1

Ответ:

Решено

Память стека всегда выделяется во время выполнения, но в языке C конкретно не упоминается, как и где выполняется выделение. И, следовательно, C не позволяет нам напрямую манипулировать стеком, и это хорошо.

Некоторые нестандартные функции, такие как alloca, могут позволять выделение стека. Также весьма вероятно, что массивы переменной длины (VLA) размещаются в стеке. В любом случае библиотека или компилятор обрабатывают выделение/освобождение, как и в случае с любой стековой памятью.

«Выделение памяти во время выполнения» и даже «динамическое выделение памяти» не являются формальными терминами, поэтому они могут означать что угодно. Хотя динамическое распределение памяти является общепринятым де-факто стандартным названием для выделенного хранилища/свободного хранилища/распределения кучи... или как-то еще это можно назвать. Формальный термин, используемый в стандарте C, — выделенная память.