見出し画像

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としての活動費に充てさせて頂きます。