- ベストアンサー
グローバル関数について
関数をグローバル領域で宣言した場合、 その関数をよんだとき スタックを記憶領域として使っていないことになるのでしょうか? よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
グローバルとは単に外部から参照されるかも知れ ないというオブジェクト上の管理方式です。 実行可能なロードモジュールでは全ての関数や 変数のアドレスは解決しており、呼び出し方や 参照方法に差はありません。 因みに「グローバル領域」と言うものはあり ません。「関数をグローバル宣言する」という 表現は分かります。
その他の回答 (5)
No.5です。 ゴメンなさい。 グローバル変数と勘違いしました。
何の言語かによって違ってきますが、PHPやPerlなどのインタープリター型言語はすべてスタックを使います。 また、CやC++などのコンパイル型言語では、グローバルはスタック上には確保されず、固定番地に確保されます。 そうしないと、複数のオブジェクトをリンクする時にアドレスを決定できません。 但し、Javaはまた特殊なので、よくわかりません。(インタープリター型言語だと思うけど) ちなみにVB(Visual Basic)言語はコンパイルと言っても中間コードにするだけなので、インタープリター型言語です。
- jacta
- ベストアンサー率26% (845/3158)
スタックを使う場合もあれば、使わない場合もあります。 関数呼び出しの実現方法が言語仕様では指定されていないということもありますが、プロセッサのアーキテクチャやどんな関数なのかによることも多いのです。 具体的には、RISCプロセッサの多くでは、サブルーチンを呼び出した際の戻り先番地は、スタックではなくレジスタに格納されます。多段に関数を呼び出す場合にはじめて、(レジスタに格納されている)以前の戻り先番地をスタックに積むのです。 あるいは、多段に呼び出す場合であっても、末尾再帰など、途中の呼び出し経路をバイパスして、一気に何段か上に戻ることができる場合もあります。
- shinh
- ベストアンサー率39% (363/926)
いいえ グローバル ローカル?にかかわらず スタック領域は使ってます。 御参考に http://www.curiocube.com/mikata/hello/ch08_callstack.php
言語は何でしょうか?
お礼
ありがとうございました