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