alloca функция в C

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


person Cemre Mengü    schedule 04.02.2012    source источник
comment
Следующая ссылка предполагает, что alloc — это другая функция: cboard.cprogramming.com/c-programming/   -  person Alex Reynolds    schedule 05.02.2012
comment
Я думаю, вы правы. Я думаю, что это их пример реализации распределителя.   -  person Cemre Mengü    schedule 05.02.2012
comment
Вы пересматриваете K&R? Ты должен быть блестящим.   -  person abelenky    schedule 05.02.2012
comment
Я знаю, что он «немного» устарел, но не знаю никаких других ресурсов, которые могли бы помочь мне разобраться с основами. Какие-либо предложения ?   -  person Cemre Mengü    schedule 05.02.2012


Ответы (3)


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

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

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

person David Heffernan    schedule 04.02.2012
comment
Третий абзац нельзя не подчеркнуть. Почти нет безопасного способа использовать alloca или VLA. - person R.. GitHub STOP HELPING ICE; 05.02.2012

Функции malloc, calloc и realloc выделяют место в куче.

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

person Eregrith    schedule 04.02.2012

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

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

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

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

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

person Haris    schedule 01.09.2015
comment
@NickA Я надеюсь, что это сделал Харис. Я исправил на всякий случай. - person cmaster - reinstate monica; 03.04.2017