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