ALLOCA(3)

НАЗВАНИЕ
alloca - функция распределения памяти

СИНТАКСИС
#include <alloca.h>

void *alloca(size_t size);

ОПИСАНИЕ
Функция alloca выделяет size байтов памяти в стеке. Это временное хранилище данных автоматически освобождается после возврата функции, вызвавшей alloca к своему владельцу.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция alloca возвращает указатель на начало выделенной памяти. Если распределение памяти привело к переполнению стека, то дальнейшее поведение программы не определено.

СООТВЕТСТВИЕ СТАНДАРТАМ
Совершенно очевидно, что функция alloca существует в 32v, pwb, pwb.2, 3bsd и 4bsd. Об этом существует соответствующая страница руководства в BSD версии 4.3. В Linux используется версия GNU. Эта функция не регламентируется стандартами POSIX или SUSv3.

ЗАМЕЧАНИЯ К ВЕРСИИ GNU
Обычно gcc переводит вызовы к alloca построчно. Этого не делается, если были указаны опции -ansi или -fno-builtin. Но будьте осторожны! По умолчанию версия glibc <stdlib.h> включает <alloca.h> и поэтому содержит строку
    # define alloca(size) __builtin_alloca (size)
что приводит к множеству неприятных последствий, если у кого-то есть своя версия этой функции.

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

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

НАЙДЕННЫЕ ОШИБКИ
Функция alloca зависит от машины и компилятора. Во многих системах ее реализация проблематична и содержит много ошибок. Ее использование очень несерьезно и не одобряется.

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

СМ. ТАКЖЕ
brk(2), pagesize(2), calloc(3), malloc(3), realloc(3)