こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

グローバル関数について

関数をグローバル領域で宣言した場合、
その関数をよんだとき 
スタックを記憶領域として使っていないことになるのでしょうか?

よろしくお願いします。

投稿日時 - 2010-03-12 14:31:32

QNo.5745955

すぐに回答ほしいです

質問者が選んだベストアンサー

グローバルとは単に外部から参照されるかも知れ
ないというオブジェクト上の管理方式です。
実行可能なロードモジュールでは全ての関数や
変数のアドレスは解決しており、呼び出し方や
参照方法に差はありません。
因みに「グローバル領域」と言うものはあり
ません。「関数をグローバル宣言する」という
表現は分かります。

投稿日時 - 2010-03-12 15:04:22

ANo.4

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(6)

No.5です。
ゴメンなさい。
グローバル変数と勘違いしました。

投稿日時 - 2010-03-12 15:15:10

お礼

ありがとうございました

投稿日時 - 2010-05-09 16:56:26

何の言語かによって違ってきますが、PHPやPerlなどのインタープリター型言語はすべてスタックを使います。
また、CやC++などのコンパイル型言語では、グローバルはスタック上には確保されず、固定番地に確保されます。
そうしないと、複数のオブジェクトをリンクする時にアドレスを決定できません。
但し、Javaはまた特殊なので、よくわかりません。(インタープリター型言語だと思うけど)
ちなみにVB(Visual Basic)言語はコンパイルと言っても中間コードにするだけなので、インタープリター型言語です。

投稿日時 - 2010-03-12 15:10:36

ANo.3

スタックを使う場合もあれば、使わない場合もあります。
関数呼び出しの実現方法が言語仕様では指定されていないということもありますが、プロセッサのアーキテクチャやどんな関数なのかによることも多いのです。

具体的には、RISCプロセッサの多くでは、サブルーチンを呼び出した際の戻り先番地は、スタックではなくレジスタに格納されます。多段に関数を呼び出す場合にはじめて、(レジスタに格納されている)以前の戻り先番地をスタックに積むのです。
あるいは、多段に呼び出す場合であっても、末尾再帰など、途中の呼び出し経路をバイパスして、一気に何段か上に戻ることができる場合もあります。

投稿日時 - 2010-03-12 15:02:18

ANo.2

いいえ グローバル ローカル?にかかわらず スタック領域は使ってます。
御参考に
http://www.curiocube.com/mikata/hello/ch08_callstack.php

投稿日時 - 2010-03-12 14:48:29

言語は何でしょうか?

投稿日時 - 2010-03-12 14:46:11

あなたにオススメの質問