Windows プログラミング

VC++ を用いるプログラミングではWindows アーキテクチャー について知っておく必要があります。
更新日 2014-07-29

Windows プラットフォーム関連

Unicode のサポート

Windows 2000ベースではOS 内部処理はUnicode を扱うように実装されており、MBCS コンパイルのアプリも互換で動きますがUnicode に一旦変換されてから 処理されるため速度が遅くなります。

プロセス

アプリケーション毎の実行単位で、OSによって生成・管理される仮想の実行環境(プロセス空間)を指したりもします。

ハンドル

OS側で準備されるリソースに対する識別子の事です。Win32API のメソッドを用いてこれらのリソースを利用する事ができます。

MFC

Microsoft Faundation Class の略で、Win32SDK を使った典型的なプログラミングをC++のクラスにカプセル化したものです。 MFC のメソッドの多くはWin32API を直接呼び出すだけであり、Win32API の拡張と考えて利用する事になります。

メモリ

Windows は強力なメモリ保護が施されているので、許可されていないアドレスにアクセスすると例外(Access violation)が発生します。 これはメモリアドレスの値がローカルプロセスに対してのみ有効(分かりやすく言えばプロセスを基点にしたオフセットアドレス)だからです。

.Net Framework

これまでのアプリケーションはWindows ネイティブアプリでした。OS はそもそもハードとソフトの仲介役なんですが、そのWindows 自体も進化とともに ネイティブ環境が少なからず変化してきました。.Net Framework はアプリケーションとWindows の間を仲介するラッパー層です。ある意味で仮想環境のようなものです。

メリット

アプリケーションとOS(ここではWindows) の関係を切り離す事で、OSの将来的な仕様変更にアプリケーションが影響を受けないようになります(初期の.Net Framework はさすがに サポート外になりつつありますが)。またWindows 以外のプラットフォームにも移植が進むと考えられます。

メモリ管理

Windows ネィティブアプリはWindows からプロセスとメモリを直接借りていました。.Net Framework ではこれを仲介処理します。メモリの開放し忘れに対してはガーベッジコレクタ、 プロセスやマルチスレッドに対して動的に柔軟なCPUリソースの割り当てを設定できるようになりました。とくに手間のかかるマルチスレッド管理の実装が大幅に簡略化できるように なりました。