Я пересматривал 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().