このページの本文へ

.NET FrameworkとCommon Language Runtime

インサイドMicrosoft.NET(その2)

2000年10月25日 21時24分更新

文● Tetsuya Hara and Peter Hamilton

  • この記事をはてなブックマークに追加
  • 本文印刷
 

 安全なコードの実行を実現するためにCommon Language Runtimeは「Managed Code」と協調して動作する。Managed Codeは各言語のコンパイラがILに変換する時に、メタデータのなかにその情報が組み込まれる。Managed Codeは、メタデータとして提供されたタイプ情報を参照し、オブジェクトの参照管理を行ない、例外ハンドルテーブルを構築する。実行時に例外(エクセプション)が発生した場合には、Common Language Runtimeは例外ハンドルテーブルの情報をもとにして例外をハンドリングしていく。

 例外ハンドラは、複数の言語間を超えて設定が可能だ。たとえば、C++で作ったクラスをVisual Basicのなかで再利用していた場合、実際にエクセプションが起こる場所がC++のコードのなか、その例外をキャッチする場所はVisual Basicのなかといったようなことも可能となる。またManaged Codeは、セキュリティに関する管理も行なっている。許されないパーミッションの部分の実行や、権利のない場所へのアクセスの防止などを行なっているわけだ。

 Common Language Runtimeは、自動的なライフタイム管理機能を持っている(正確には、ガベージコレクターが管理)。また、デバッギングとプロファイルもサポートされている。つまり、Common Language Runtimeが、どういうふうにして、どこにアクセスしているコードなのかということを、すべて管理している。

 その他に、データに関しても管理されている。今までコンパイラやプログラムの実装者に任されていた部分もあったが、Common Language Runtimeは、すべてのデータのレイアウトを自動的に管理する。ガベージコレクターによってデータは、どの場所にどのぐらいのリソースが書かれていて、それに関する参照が残っているのかどうか、もしくは使われているのかどうかを管理される。つまり、必要以上のリソースはいつまでも確保しているようなことはせず、不要であれば破棄し、そのアプリケーションのワーキングセットサイズを最小限に抑えるようとしているわけだ。

 そしてこれらのデータは、Common Language Runtimeによって自由に場所が移動される可能性がある。どのデータがどのように使われて、どのオブジェクトをインスタンス化して、どのメモリを使っているといった情報は、すべて「Managed Data」として管理される対象になる。この際、自動的に決められては困るケースもあるので、メタデータのなかにデータの順番やパッキング、明示的なレイアウトを指定することも可能である。

 

カテゴリートップへ

アスキー・ビジネスセレクション

ASCII.jp ビジネスヘッドライン

ピックアップ