解決済みの質問
7人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(5件中 1~5件目)
何の言語かによって違ってきますが、PHPやPerlなどのインタープリター型言語はすべてスタックを使います。
また、CやC++などのコンパイル型言語では、グローバルはスタック上には確保されず、固定番地に確保されます。
そうしないと、複数のオブジェクトをリンクする時にアドレスを決定できません。
但し、Javaはまた特殊なので、よくわかりません。(インタープリター型言語だと思うけど)
ちなみにVB(Visual Basic)言語はコンパイルと言っても中間コードにするだけなので、インタープリター型言語です。
投稿日時 - 2010-03-12 15:10:36
スタックを使う場合もあれば、使わない場合もあります。
関数呼び出しの実現方法が言語仕様では指定されていないということもありますが、プロセッサのアーキテクチャやどんな関数なのかによることも多いのです。
具体的には、RISCプロセッサの多くでは、サブルーチンを呼び出した際の戻り先番地は、スタックではなくレジスタに格納されます。多段に関数を呼び出す場合にはじめて、(レジスタに格納されている)以前の戻り先番地をスタックに積むのです。
あるいは、多段に呼び出す場合であっても、末尾再帰など、途中の呼び出し経路をバイパスして、一気に何段か上に戻ることができる場合もあります。
投稿日時 - 2010-03-12 15:02:18
いいえ グローバル ローカル?にかかわらず スタック領域は使ってます。
御参考に
http://www.curiocube.com/mikata/hello/ch08_callstack.php
投稿日時 - 2010-03-12 14:48:29