Я пересматривал C и сталкивался с функциями alloca/free, которые описываются как выделение хранилища в стеке как пространство. Это то же самое, что и malloc/free? или это что-то другое? Спасибо.
Функция alloca в C
Ответ 1
Я думаю, вы имеете в виду alloca
, который используется для выделения памяти в стеке. И да, это отличается от malloc
и free
, которые выделяются в куче.
Не пытайтесь освободить память, выделенную с помощью alloca
, потому что она автоматически освобождается, когда функция, вызывающая alloca
, возвращается к вызывающей стороне.
Использование массивов переменной длины alloca
и/или C99 может быть рискованным бизнесом, потому что вы можете легко переполнить стек, если вы используете эти инструменты неосмотрительно.
Ответ 2
malloc
, calloc
и realloc
функции выделяют пространство в куче.
free
функция "освобождает" пространство, ранее выделенное этими функциями.
Ответ 3
Добавление дополнительной информации в старый ответ.
malloc()
может использоваться по нескольким причинам, некоторые из них
- Динамическое распределение памяти
- Область (когда требуется память, которая остается между вызовами функций)
Но одна дополнительная работа, которая добавляется с помощью malloc()
, заключается в явной free()
выделенной памяти.
Итак, чтобы использовать только Динамическое распределение памяти, и чтобы избежать накладных расходов free()
, в своей программе можно использовать alloca()
. Это стало возможным благодаря тому, что память выделяется в стеке (как упоминалось в других ответах), когда используется alloca()
.