Функция alloca в C

Я пересматривал C и сталкивался с функциями alloca/free, которые описываются как выделение хранилища в стеке как пространство. Это то же самое, что и malloc/free? или это что-то другое? Спасибо.

Ответ 1

Я думаю, вы имеете в виду alloca, который используется для выделения памяти в стеке. И да, это отличается от malloc и free, которые выделяются в куче.

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

Использование массивов переменной длины alloca и/или C99 может быть рискованным бизнесом, потому что вы можете легко переполнить стек, если вы используете эти инструменты неосмотрительно.

Ответ 2

malloc, calloc и realloc функции выделяют пространство в куче.

free функция "освобождает" пространство, ранее выделенное этими функциями.

Ответ 3

Добавление дополнительной информации в старый ответ.

malloc() может использоваться по нескольким причинам, некоторые из них

  • Динамическое распределение памяти
  • Область (когда требуется память, которая остается между вызовами функций)

Но одна дополнительная работа, которая добавляется с помощью malloc(), заключается в явной free() выделенной памяти.

Итак, чтобы использовать только Динамическое распределение памяти, и чтобы избежать накладных расходов free(), в своей программе можно использовать alloca(). Это стало возможным благодаря тому, что память выделяется в стеке (как упоминалось в других ответах), когда используется alloca().