функция alloca в C

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

3 ответов


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

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

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


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

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


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

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

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

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

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