![見出し画像](https://assets.st-note.com/production/uploads/images/40088833/rectangle_large_type_2_d30f1396e88612a66c1e6db4d399c406.png?width=1200)
C : alloca
alloca
一般的に、C言語でメモリの動的確保と言えば、malloc~freeの流れですが、標準関数ではないものの多くの環境に、alloca(or _alloca)という関数があります。この関数の特徴としては、「メモリ領域をスタックに取る」ということです。そのため、以下のpositiveな特徴があります。
* 使い終わった後のfreeの必要がない(してはならない)
* スコープを抜ければ自動で解放される
* 返り値としてこのメモリ領域へのポインタを返してはいけない(解放されるので)
* オーバーヘッドが少ない(ヒープは遅い)
一方、スタック上にメモリ確保するので、スタックオーバーフローには気をつけなければなりません。
Sample Code
Githubにupしておきました。
参考文献/ URL
* alloca関数
Editor's note
標準ではないとは言え、以下のような場合、使用を検討してみても良いのではないでしょうか。
* ある関数内で、実行時までサイズが決まらない配列を確保したい
* オーバーヘッドを小さくしたい
ある関数に入るたび、malloc/ freeしてヒープを汚していく(フラグメンテーション)と、installationなどの長時間使用では、performanceに影響が出る危険があるので、私はたまに使っています。
ガベージコレクション不要な環境も増えているのだと思いますが、C/C++のように、Programmerが全責任を持つ系は大好きです。車で言う、Manual車の感覚でしょうか。開発環境が楽になっても、こう言う感覚を大事にしたいと思っています。
もしよろしければ、サポートをお願いします! 頂いたサポートは、Creatorとしての活動費に充てさせて頂きます。