alloca

提供: RAD Studio
移動先: 案内検索

Malloc.h:インデックス への移動


メモ: この機能は、従来の bcc32 コンパイラでのみ利用でき、現在の Clang 拡張 C++ コンパイラでは使用できません。

ヘッダー ファイル

malloc.h

プロトタイプ

void *alloca(size_t size);

説明

一時スタック領域を割り当てます。

alloca は、スタックに size 分のバイト数を割り当てます。割り当てられた領域は、呼び出した関数が終了した際に、自動的に解放されます。

alloca の使用は現在推奨されていません。C++ プログラムの try ブロックでは、alloca 関数は使用しないでください。例外が送出された場合、alloca によってスタックに入れられた値がすべて破損します。

戻り値

十分なスタック領域がある場合、alloca は、割り当てられたスタック領域へのポインタを返します。そうでなければ、NULL を返します。

移植性

POSIX ANSI C ANSI C++ Win32 Win64 macOS
Alloca +

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>

void test(int a) {
    char *newstack;
    int len = a;
    char dummy[1];
    dummy[0] = 0; /* force good stack frame */
    printf("SP before calling alloca(0x%X) = 0x%X\n", len, _SP);
    newstack = (char *) alloca(len);
    printf("SP after calling alloca = 0x%X\n", _SP);
    if (newstack)
        printf("Alloca(0x%X) returned %p\n", len, newstack);
    else
        printf("Alloca(0x%X) failed\n", len);
}

void main() {
    test(256);
    test(16384);
}