ALLOCA(3) | Linux Programmer's Manual | ALLOCA(3) |
名前
alloca -自動的に解放されるメモリを割り当てる書式
#include <alloca.h>説明
alloca() 関数は、 size バイトの領域を呼出元のスタック・フレームに割り付ける。この一時的な領域は、 alloca() を呼び出した関数が呼出元に返るときに自動的に解放される。返り値
alloca() 関数は、割り付けた領域の始まりを指すポインタを返す。割り付けによってスタックオーバーフローが起った場合のプログラムの動作は定義されていない。準拠
この関数は POSIX.1-2001 にはない。注意
alloca() 関数は、機種とコンパイラに依存する。特定のアプリケーションでは、この関数を使うと malloc(3) と free(3) を組み合わせて使った場合に比べて効率を改善することができる。特定の場合では、この関数を使うことで、 longjmp(3) や siglongjmp(3) を使うアプリケーションでのメモリの開放を簡単にすることができる。それ以外の場合では、この関数の使用は推奨されない。GNU 版についての注意
通常 gcc(1) は alloca() の呼び出しをインラインコードに変換する。 -ansi, -std=c89, -std=c99, -fno-builtin のいずれかのオプションが指定された場合、この変換は行われない (また <alloca.h> のインクルードも行われない)。だだし、デフォルトでは glibc 版の <stdlib.h> は <alloca.h> をインクルードしており、これには以下の行が含まれているので注意すること。
#define alloca(size) __builtin_alloca (size)
独自版の __builtin_alloca (size) 関数があると厄介な結果になる。
このコードはインライン化されているので、この関数のアドレスを取得したり、他のライブラリをリンクして動作を変更することはできない。
通常このインラインコードはスタックポインタを移動する 1 つの命令 (instruction) から構成されており、スタックオーバーフローをチェックしない。よって NULL エラーが返されることはない。
バグ
スタックフレームが拡張できなかった場合、エラー通知は行われない。 (しかしながら、割り当てに失敗した後で、プログラムが割り当てられなかった空間にアクセスしようとした場合に SIGSEGV シグナルを受信することだろう。)関連項目
brk(2), longjmp(3), malloc(3)この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2008-01-24 | GNU |