何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 35955
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

先日の「再帰呼び出しの代わり」ですが。。。

すみません。思いっきり間違いを含みまくっています。一つに、古い情報を更新せずに、そのままの感覚で書いていました(タイトルは、ここにかけてみた)。一つに、書きながら、ほかのことを考えていました。シャノンさんのつっこみをベースに、修正。

プログラム ポインタ → PC レジスタというので、「プログラム カウンタ」の方が正しく、Pentium では「EIPレジスタ」。

プログラム ポインタのスタック領域→これは、書き方が悪かった、かな?これだと EIP レジスタ専用のスタック領域があるように理解できますね。そういうつもりではありません。「スタック セグメント」ですか。あ、IL ベースではなく、ネイティブ ベースです。って、例外を生成するのは IL ベースじゃないかorz

CL → IL が正しい。CL だと、コンパイルされてないじゃないか。
あれ?「共通言語」って、「共通言語仕様」という言葉でしか使わないの?
そういえば、CLRCLI の違いもよくわからなかった。CLI は「共通言語基盤」。CLR が「共通言語ランタイム」。マイクロソフトによる CLI の実装が CLR、という理解でよかったはず。
いや、だから、頭文字略語はやめてほしい。。。あ、ここで使っているのは、acronym 要素を使っています。ポイントしてみてください。

ngen.exe → JIT コンパイラ。何を考えていたんだろう?たぶん、「どうやってアセンブリを見ようかなぁ?」とか考えていたんだと思う。で、何で「アセンブリを見よう」なんて考えていたかというと、チラホラ話題にあがっている「"=" は等号か、代入演算か」のスレに書いているコメントを考えていたから。


関連リンク

とりあえず、ここまで。

投稿日時 : 2007年3月12日 22:38
コメント
  • # re: 月日は百代の過客にして行き交う技術もまた旅人なり
    シャノン
    Posted @ 2007/03/13 15:41
    > 「EIPレジスタ」

    えくすてんでっど いんすとらくしょん ぽいんた ですな。

    > 「スタック セグメント」ですか。

    やっぱりわかんねーす。
    スタックセグメントとIPにどういう関係が?

    > いや、だから、頭文字略語はやめてほしい

    CLS(Common Language Specification)とか、CTS(Common Type System)とか、CIL(Common Intermediate Language)とかもあるでよ。
  • # re: 月日は百代の過客にして行き交う技術もまた旅人なり
    シャノン
    Posted @ 2007/03/13 15:51
    いろいろあったヨhttp://blogs.wankuma.com/jeanne/archive/2006/01/20/20736.aspx
  • # re: 月日は百代の過客にして行き交う技術もまた旅人なり
    Jitta
    Posted @ 2007/03/14 10:37
    『IA-32 インテル(R) アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル』中巻(資料番号245471J)の、CALL 命令(3-58 ページ)より。

    near コールを実行するときは、プロセッサは、EIP レジスタの値 (CALL 命令の次の命令のオフセットを内容とする) を (後でリターン命令のポインタとして使用するために) スタックにプッシュする。

     上巻(資料番号245470J)の第6章「プロシージャ・コール、割り込み、例外」には、『プロシージャ・スタック(通常は単にスタックと呼ぶ)を利用して』と書かれていますから、「プロシージャ・スタック」が正解かな。このスタックは、図6-1によるとスタック・セグメントに確保されているようです。

     でも、アプリケーションが出す「スタック オーバーフロー」と、プロシージャ・スタックのオーバーフローは、違うものと思われ。
  • # re: 月日は百代の過客にして行き交う技術もまた旅人なり
    シャノン
    Posted @ 2007/03/14 13:17
    前回の記事には

    > プログラム ポインタのスタック領域という、比較的小さなエリアの大きさによって制限されます。

    とあるので、混乱してました。
    要するに「スタックって小さいよ」ってことですよね。IP持ち出す必要はなさそう。

    > アプリケーションが出す「スタック オーバーフロー」と、プロシージャ・スタックのオーバーフローは、違うものと思われ。

    同じでしょ。
  • # re: 月日は百代の過客にして行き交う技術もまた旅人なり
    Jitta
    Posted @ 2007/03/16 6:29
    > 要するに「スタックって小さいよ」ってことですよね。IP持ち出す必要はなさそう。
     これは、「スタックといったら“スタック オーバーフローのスタック”だから、IP を持ち出す必要はない」ということでしょうか。あれ、逆?「スタック オーバーフローのスタックといえば IP を指す」?
     そうであれば、.NET には System.Collections.Stack クラスがあるので、これと混同することを避けたかったのです。。。

    > 同じでしょ。
    そうですね。CPU が出したエラーを CLR かどこかが拾って、StackOverflowException にラッピングしている、んだろうな。

     長々とおつきあいくださり、ありがとうございました。

     さて、どう書き直そうかな、と。
  • # re: 月日は百代の過客にして行き交う技術もまた旅人なり
    シャノン
    Posted @ 2007/03/16 16:02
    > .NET には System.Collections.Stack クラスがあるので、これと混同することを避けたかったのです

    そっちかー。

    > CPU が出したエラーを CLR かどこかが拾って、StackOverflowException にラッピングしている、んだろうな。

    CPUはエラーを出しませんよ。
    CPUが関知するのは現在のスタックポインタだけで、スタックサイズの面倒をみるのはOSの仕事ですから。

    ついでに、スタックに積むのはIPだけとは限らない…のはOKですよね?
    引数も自動変数も積まれます。

    ま、これはすべてWin32アプリの話。
    CLRなんかは、OS上で動くもう一つのOSと言ってもいいほどなので、CPUやOSのスタック機構を使っているとは限りませんからね。
タイトル
名前
Url
コメント