2009-04-21 7 views
1

throw Exception)と(return value)はJavaやC#などの言語でどのように実装されていますか? try { .... } catch (Exception) {}の使用だけでなく、そのサポートがどのように言語に含まれているかのメカニズムを知りたい。私たちは、コールに続いて例外、リターン、シリアライズ可能、

public void doSomething() { 
    .... 
    .... 
    return; 
} 

すなわち

関数を呼び出すときに我々が知っている

はスタックに置かれ、この方法は、スタック上doSomethingへのコールが飛び出す返したとき。

値を持つreturn文が返す場合に何が起こる、スタック上のdoSomething()へのコールが飛び出すと、プログレカウンター上の次の文が処理されてしまったreturn 4;、 を言うの?戻り値はどうなりましたか?それはどこで救われ、どのように活用されましたか?


同様に例外スローの場合には、throw ex;文がスタックに適切なcatch文を見つけ、それを見つけるまで、それはスタックの外に物事を飛び出る続けて...どのようにこのメカニズムの作業はありません?

+1

これを編集して2つの異なる質問 –

+0

にすると、あなたの質問を編集するだけの価値がありますが、今は全く異なっています。 –

+0

申し訳ありませんが、もっと精巧になる必要があると思いました。 –

答えて

2

this articleをご覧ください。これは、.NET(C#)例外システムのSEHの基礎について語っています。

EDIT:

あなたが求めている場合は、this articleを見て、「パラメータと戻り値を持つメソッドを呼び出すどのようにC#やJavaのようなもので働きます」。

非常に低いレベル(私があなたが尋ねていると思っているもの)で、メソッドを呼び出すときには、あなたのパラメータをスタックにプッシュし、関数を実行してからスタックの戻り値をポップします以下のようなregisterし、それのオフプロセス:

  • 方法からの戻り(アセンブリコード)
  • pop esx - ポップオフ値スタックとEAXレジスタに
  • jz esx A01hそれを保存 - EAX場合レジスタがゼロの場合、この位置にジャンプします。

EDIT#2:例外の場合

は、管理フレームワーク(Javaや.NETなど)は、「キャッチを探しているときのスタック一歩をくつろぎを開始します"または" finally "ブロックでエラーを処理できます。コードを処理できるコードブロックが見つかるか、コードが不足してプログラムが終了するまで、これを続けます。どのようにスタックレベルで動作するかを理解するには、あなたが話している管理対象フレームワークによって異なりますが、上記の最初の記事とthis articleを組み合わせると、より深いビューが得られます。

+0

はい私は低レベルのものについて尋ねています。ありがとう、私は多かれ少なかれ同じを把握したが、確認したい..答えに感謝します。 –

+0

これがあなたの質問に答えた場合は、その質問に印を付けて回答するか削除してください(孤立したままにしないでください) – JasonRShaver

関連する問題