функция alloca в C - PullRequest
       27

функция alloca в C

10 голосов
/ 05 февраля 2012

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

Ответы [ 3 ]

22 голосов
/ 05 февраля 2012

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

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

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

3 голосов
/ 05 февраля 2012
Функции

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

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

0 голосов
/ 01 сентября 2015

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

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

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

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

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

...