alloca
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);
}