Alloca

From EjudgeWiki
Revision as of 13:52, 22 August 2008 by Cher (talk | contribs) (New page: Функция alloca выделяет память в стеке функции, из которой вызвана. Память будет автоматически освобожде...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Функция alloca выделяет память в стеке функции, из которой вызвана. Память будет автоматически освобождена при выходе из этой функции.

void *alloca(size_t size);

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

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

  • Максимальный размер стека процесса, как правило, ограничен существенно меньшим значением, чем размер адресного пространства. Например, в Linux по умолчанию максимальный размер стека — 8 MiB. Он еще меньше в создаваемых потоках многопоточного приложения.
  • Попытка выделить область памяти большого размера (так, что ограничение на размер стека будет превышено) приводит к снятию процесса с выполнения посылкой ему сигнала SIGSEGV, то есть нет способа получить управление назад в случае, если выделение памяти невозможно.