alloca() 関数はスタックアロケーターの C 言語実装です。
スタックアロケーターはヒープ領域ではなくスタック領域にメモリーを割り当てることができます。
では宣言です。
#include <alloca.h> void *alloca(size_t size);
基本的には malloc() と同じ引数や戻り値型ですね。
では簡単な実装をしてみましょうかね。
main.c.
1 #include <alloca.h> 2 #include <stdio.h> 3 4 int main() 5 { 6 void* ptr = alloca(sizeof(int)); 7 printf("%p\n",ptr); 8 return 0; 9 }
これをビルドして出力すると以下のような結果を出力します。
$ gcc main.c $ ./a.out 0x7fffde845670
ptr は alloca() を使わないと何も指していないポインターですんで、そのままでは使えません。
てなことで alloca() を使うことで動的な割り当てがスタックメモリー領域で使えることが確認できましたね。
次の項目ではもう少し複雑な例を考えて見ましょうかね。
Copyright 2018-2019, by Masaki Komatsu