OSDN Git Service

(split) LDP: Release pages for LDP v3.39.
[linuxjm/LDP_man-pages.git] / release / man3 / alloca.3
index cde5ab8..3b7c384 100644 (file)
 .\"     Various rewrites and additions (notes on longjmp() and SIGSEGV).
 .\"     Weaken warning against use of alloca() (as per Debian bug 461100).
 .\"
-.\" Japanese Version Copyright (c) 1996 Kentaro OGAWA
-.\"         all rights reserved.
-.\" Translated Sat, 13 Jul 1996 22:44:04 +0900
-.\"         by Kentaro OGAWA <k_ogawa@oyna.cc.muroran-it.ac.jp>
-.\" Updated & Modified Tue Oct 16 01:01:48 JST 2001
-.\"         by Yuichi SATO <ysato@mail.sbvl.muroran-it.ac.jp>
-.\" Updated & Modified Sat Aug 31 04:42:49 JST 2002 by Yuichi SATO
+.\"*******************************************************************
 .\"
-.TH ALLOCA 3 2008-01-24 "GNU" "Linux Programmer's Manual"
-.SH Ì¾Á°
-alloca \- ¼«Æ°Åª¤Ë²òÊü¤µ¤ì¤ë¥á¥â¥ê¤ò³ä¤êÅö¤Æ¤ë
-.SH ½ñ¼°
-.B #include <alloca.h>
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH ALLOCA 3 2008\-01\-24 GNU "Linux Programmer's Manual"
+.SH 名前
+alloca \- 自動的に解放されるメモリを割り当てる
+.SH 書式
+\fB#include <alloca.h>\fP
 .sp
-.BI "void *alloca(size_t " size );
-.SH ÀâÌÀ
-.BR alloca ()
-´Ø¿ô¤Ï¡¢
-.I size
-¥Ð¥¤¥È¤ÎÎΰè¤ò¸Æ½Ð¸µ¤Î¥¹¥¿¥Ã¥¯¡¦¥Õ¥ì¡¼¥à¤Ë³ä¤êÉÕ¤±¤ë¡£
-¤³¤Î°ì»þŪ¤ÊÎΰè¤Ï¡¢
-.BR alloca ()
-¤ò¸Æ¤Ó½Ð¤·¤¿´Ø¿ô¤¬¸Æ½Ð¸µ¤ËÊÖ¤ë¤È¤­¤Ë¼«Æ°Åª¤Ë²òÊü¤µ¤ì¤ë¡£
-.SH ÊÖ¤êÃÍ
-.BR alloca ()
-´Ø¿ô¤Ï¡¢³ä¤êÉÕ¤±¤¿Îΰè¤Î»Ï¤Þ¤ê¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£
-³ä¤êÉÕ¤±¤Ë¤è¤Ã¤Æ¥¹¥¿¥Ã¥¯¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬µ¯¤Ã¤¿¾ì¹ç¤Î
-¥×¥í¥°¥é¥à¤ÎÆ°ºî¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£
-.SH ½àµò
-¤³¤Î´Ø¿ô¤Ï POSIX.1-2001 ¤Ë¤Ï¤Ê¤¤¡£
+\fBvoid *alloca(size_t \fP\fIsize\fP\fB);\fP
+.SH 説明
+\fBalloca\fP()  関数は、 \fIsize\fP バイトの領域を呼出元のスタック・フレームに割り付ける。 この一時的な領域は、 \fBalloca\fP()
+を呼び出した関数が呼出元に返るときに自動的に解放される。
+.SH 返り値
+\fBalloca\fP()  関数は、割り付けた領域の始まりを指すポインタを返す。 割り付けによってスタックオーバーフローが起った場合の
+プログラムの動作は定義されていない。
+.SH 準拠
+この関数は POSIX.1\-2001 にはない。
 
-32V, PWB, PWB.2, 3BSD, 4BSD ¤Ë
-.BR alloca ()
-´Ø¿ô¤¬Åо줷¤¿¾Úµò¤¬¤¢¤ë¡£
-4.3BSD ¤Ë¤Ï¡¢¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤¬¤¢¤ë¡£
-Linux ¤Ï¡¢GNU ÈǤò»È¤Ã¤Æ¤¤¤ë¡£
-¤³¤Î´Ø¿ô¤Ï POSIX.1-2001 ¤Ë¤Ï¤Ê¤¤¡£
-.SH Ãí°Õ
-.BR alloca ()
-´Ø¿ô¤Ï¡¢µ¡¼ï¤È¥³¥ó¥Ñ¥¤¥é¤Ë°Í¸¤¹¤ë¡£
-ÆÃÄê¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤Ï¡¢¤³¤Î´Ø¿ô¤ò»È¤¦¤È
-.BR malloc (3)
-¤È
-.BR free (3)
-¤òÁȤ߹ç¤ï¤»¤Æ»È¤Ã¤¿¾ì¹ç¤ËÈæ¤Ù¤Æ¸úΨ¤ò²þÁ±¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
-ÆÃÄê¤Î¾ì¹ç¤Ç¤Ï¡¢¤³¤Î´Ø¿ô¤ò»È¤¦¤³¤È¤Ç¡¢
-.BR longjmp (3)
-¤ä
-.BR siglongjmp (3)
-¤ò»È¤¦¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤Î¥á¥â¥ê¤Î³«Êü¤ò´Êñ¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
-¤½¤ì°Ê³°¤Î¾ì¹ç¤Ç¤Ï¡¢¤³¤Î´Ø¿ô¤Î»ÈÍѤϿ侩¤µ¤ì¤Ê¤¤¡£
+32V, PWB, PWB.2, 3BSD, 4BSD に \fBalloca\fP()  関数が登場した証拠がある。 4.3BSD
+には、マニュアルページがある。 Linux は、GNU 版を使っている。 この関数は POSIX.1\-2001 にはない。
+.SH 注意
+\fBalloca\fP()  関数は、機種とコンパイラに依存する。 特定のアプリケーションでは、この関数を使うと \fBmalloc\fP(3)  と
+\fBfree\fP(3)  を組み合わせて使った場合に比べて効率を改善することができる。 特定の場合では、この関数を使うことで、 \fBlongjmp\fP(3)
+や \fBsiglongjmp\fP(3)  を使うアプリケーションでのメモリの開放を簡単にすることができる。
+それ以外の場合では、この関数の使用は推奨されない。
 
-.BR alloca ()
-¤Ë¤è¤ê³ä¤êÅö¤Æ¤é¤ì¤ë¶õ´Ö¤Ï¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤«¤é³ä¤êÅö¤Æ¤é¤ë¤Î¤Ç¡¢
-´Ø¿ô¤ÎÌá¤êÀ褬
-.BR longjmp (3)
-¤ä
-.BR siglongjmp (3)
-¤Î¸Æ¤Ó½Ð¤·¤Ë¤è¤ê¥¸¥ã¥ó¥×¤·¤¿¾ì¹ç¤Ë¤Ï¡¢
-³ä¤êÅö¤Æ¤é¤ì¤¿¶õ´Ö¤Ï¼«Æ°Åª¤Ë²òÊü¤µ¤ì¤ë¡£
+\fBalloca\fP()  により割り当てられる空間はスタックフレームから割り当てらるので、 関数の戻り先が \fBlongjmp\fP(3)  や
+\fBsiglongjmp\fP(3)  の呼び出しによりジャンプした場合には、 割り当てられた空間は自動的に解放される。
 
-.BR alloca ()
-¤Ç³ä¤êÅö¤Æ¤é¤ì¤¿¶õ´Ö¤ò
-.BR free (3)
-¤·¤è¤¦¤È¤¹¤ë¤³¤È¤Î¤Ê¤¤¤è¤¦¤Ë¡ª
-.SH Ãí°Õ
-.SS GNU ÈǤˤĤ¤¤Æ¤ÎÃí°Õ
-Ä̾ï
-.BR gcc (1)
-¤Ï
-.BR alloca ()
-¤Î¸Æ¤Ó½Ð¤·¤ò¥¤¥ó¥é¥¤¥ó¥³¡¼¥É¤ËÊÑ´¹¤¹¤ë¡£
-.IR "\-ansi" ,
-.IR "\-std=c89" ,
-.IR "\-std=c99" ,
-.IR "\-fno\-builtin"
-¤Î¤¤¤º¤ì¤«¤Î¥ª¥×¥·¥ç¥ó¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¡¢¤³¤ÎÊÑ´¹¤Ï¹Ô¤ï¤ì¤Ê¤¤
-(¤Þ¤¿
-.I <alloca.h>
-¤Î¥¤¥ó¥¯¥ë¡¼¥É¤â¹Ô¤ï¤ì¤Ê¤¤)¡£
-¤À¤À¤·¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï glibc ÈǤÎ
-.I <stdlib.h>
-¤Ï
-.I <alloca.h>
-¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ¤ª¤ê¡¢¤³¤ì¤Ë¤Ï°Ê²¼¤Î¹Ô¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¤Î¤ÇÃí°Õ¤¹¤ë¤³¤È¡£
+\fBalloca\fP()  で割り当てられた空間を \fBfree\fP(3)  しようとすることのないように!
+.SS "GNU 版についての注意"
+通常 \fBgcc\fP(1)  は \fBalloca\fP()  の呼び出しをインラインコードに変換する。 \fI\-ansi\fP, \fI\-std=c89\fP,
+\fI\-std=c99\fP, \fI\-fno\-builtin\fP のいずれかのオプションが指定された場合、この変換は行われない (また
+\fI<alloca.h>\fP のインクルードも行われない)。 だだし、デフォルトでは glibc 版の
+\fI<stdlib.h>\fP は \fI<alloca.h>\fP
+をインクルードしており、これには以下の行が含まれているので注意すること。
 .nf
 
     #define alloca(size)   __builtin_alloca (size)
 
 .fi
-Æȼ«ÈǤΠ__builtin_alloca (size) ´Ø¿ô¤¬¤¢¤ë¤ÈÌñ²ð¤Ê·ë²Ì¤Ë¤Ê¤ë¡£
+独自版の __builtin_alloca (size) 関数があると厄介な結果になる。
 .LP
-¤³¤Î¥³¡¼¥É¤Ï¥¤¥ó¥é¥¤¥ó²½¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢
-¤³¤Î´Ø¿ô¤Î¥¢¥É¥ì¥¹¤ò¼èÆÀ¤·¤¿¤ê¡¢
-¾¤Î¥é¥¤¥Ö¥é¥ê¤ò¥ê¥ó¥¯¤·¤ÆÆ°ºî¤òÊѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£
+このコードはインライン化されているので、 この関数のアドレスを取得したり、 他のライブラリをリンクして動作を変更することはできない。
 .LP
-Ä̾盧¤Î¥¤¥ó¥é¥¤¥ó¥³¡¼¥É¤Ï¥¹¥¿¥Ã¥¯¥Ý¥¤¥ó¥¿¤ò°ÜÆ°¤¹¤ë
-1 ¤Ä¤ÎÌ¿Îá (instruction) ¤«¤é¹½À®¤µ¤ì¤Æ¤ª¤ê¡¢
-¥¹¥¿¥Ã¥¯¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤ò¥Á¥§¥Ã¥¯¤·¤Ê¤¤¡£
-¤è¤Ã¤Æ NULL ¥¨¥é¡¼¤¬ÊÖ¤µ¤ì¤ë¤³¤È¤Ï¤Ê¤¤¡£
-.SH ¥Ð¥°
-¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤¬³ÈÄ¥¤Ç¤­¤Ê¤«¤Ã¤¿¾ì¹ç¡¢¥¨¥é¡¼ÄÌÃΤϹԤï¤ì¤Ê¤¤¡£
-(¤·¤«¤·¤Ê¤¬¤é¡¢³ä¤êÅö¤Æ¤Ë¼ºÇÔ¤·¤¿¸å¤Ç¡¢¥×¥í¥°¥é¥à¤¬³ä¤êÅö¤Æ¤é¤ì¤Ê¤«¤Ã¤¿
-¶õ´Ö¤Ë¥¢¥¯¥»¥¹¤·¤è¤¦¤È¤·¤¿¾ì¹ç¤Ë
-.B SIGSEGV
-¥·¥°¥Ê¥ë¤ò¼õ¿®¤¹¤ë¤³¤È¤À¤í¤¦¡£)
+通常このインラインコードはスタックポインタを移動する 1 つの命令 (instruction) から構成されており、
+スタックオーバーフローをチェックしない。 よって NULL エラーが返されることはない。
+.SH バグ
+スタックフレームが拡張できなかった場合、エラー通知は行われない。 (しかしながら、割り当てに失敗した後で、プログラムが割り当てられなかった
+空間にアクセスしようとした場合に \fBSIGSEGV\fP シグナルを受信することだろう。)
 
-¿¤¯¤Î¥·¥¹¥Æ¥à¤Ë¤ª¤¤¤Æ¡¢´Ø¿ô¥³¡¼¥ë¤Î°ú¤­¿ô¤Î¥ê¥¹¥ÈÆâ¤Ç¤Ï
-.BR alloca ()
-¤¬»È¤¨¤Ê¤¤¡£
-¤³¤ì¤Ï¡¢
-.BR alloca ()
-¤Ë¤è¤Ã¤ÆͽÌ󤵤ì¤ë¥¹¥¿¥Ã¥¯Îΰ褬¡¢
-´Ø¿ô°ú¤­¿ô¤Ë»È¤ï¤ì¤ë¥¹¥¿¥Ã¥¯Îΰè¤ÎÃæ¤Ë¸½¤ì¤Æ¤·¤Þ¤¦¤¿¤á¤Ç¤¢¤ë¡£
-.SH ´ØÏ¢¹àÌÜ
-.BR brk (2),
-.BR longjmp (3),
-.BR malloc (3)
+多くのシステムにおいて、関数コールの引き数のリスト内では \fBalloca\fP()  が使えない。 これは、 \fBalloca\fP()
+によって予約されるスタック領域が、 関数引き数に使われるスタック領域の中に現れてしまうためである。
+.SH 関連項目
+\fBbrk\fP(2), \fBlongjmp\fP(3), \fBmalloc\fP(3)