4 GB のチューニング: BCDEdit と Boot.ini

Windows の 32 ビット版では、アプリケーションで 4 GB の仮想アドレス空間を使用できます。 仮想アドレス空間は、2 GB をアプリケーションで使用できるように分割され、他の 2 GB はシステムでのみ使用できます。 BCDEdit /set increaseuserva コマンドで有効になっている 4 GB チューニング (4GT または 4GT RAM チューニング) 機能により、アプリケーションで使用できる仮想アドレス空間が最大 3 GB まで増え、システムで使用可能な量が 1 から 2 GB まで減少します。

データベース管理システム (DBMS) など、メモリを集中的に消費するアプリケーションでは、より大きな仮想アドレス空間を使用すると、パフォーマンスとスケーラビリティに大きなメリットが生じ得る可能性があります。 ただし、ファイル キャッシュ、ページ プール、および非ページ プールは小さく、ネットワークや I/O が多いアプリケーションに悪影響を及ぼす可能性があります。 そのため、負荷の下でアプリケーションをテストし、パフォーマンス カウンターを調べて、アプリケーションが大きなアドレス空間からメリットを得るかどうかを判断することができます。

4GT を有効にするには 、BCDEdit /set コマンドを使用して 、increaseuserva ブート エントリ オプションを 2048 (2 GB) から 3072 (3 GB) の値に設定します。

Windows Server 2003 以前: 4GT を有効にするには 、/3GB スイッチ を Boot.iniします。 /3GB スイッチは、次のシステムでサポートされています。

  • Windows Server 2003
  • Windows XP Professional

/3 GB スイッチ を使用すると、アプリケーションで完全な 3 GB の仮想アドレス空間を使用し、システムで使用可能な量を 1 GB に減らします。 Windows Server 2003 では、Boot.ini の /USERVA スイッチを 2048 から 3072 の値に設定することで、アプリケーションで使用できるアドレス空間の量を調整できます。これは、システムで使用できるアドレス空間の量を増やします。 これは、アプリケーションで 2 GB を超えるが 3 GB 未満のアドレス空間が必要な場合に、システム全体のパフォーマンスを維持するのに役立ちます。

アプリケーションで大きなアドレス空間を使用するには、イメージ ヘッダーに IMAGE FILE LARGE ADDRESS _ _ _ _ AWARE フラグを設定します。 このフラグを設定 Microsoft Visual C++/LARGEADDRESSAWARE スイッチがサポートされているリンカー。 このフラグを設定してから、4GT のサポートを受けられていないシステムでアプリケーションを実行しても、アプリケーションには影響を与え "できません"。

Windows の 64 ビット エディションでは 、IMAGE _ FILE LARGE ADDRESS _ _ _ AWAREフラグでマークされた 32 ビット アプリケーションでは、4 GB のアドレス空間を使用できます。

Windows Server 2003 の Itanium エディション: SP1 より前の 32 ビット プロセスでは、使用可能なアドレス空間は 2 GB のみです。

アプリケーションで 4GT をサポートするには、次のガイドラインに従います。

  • 通常、2 GB 境界に近いアドレスは、さまざまなシステム DLL で使用されます。 そのため、32 ビット プロセスでは、4 GB のアドレス空間全体が使用可能な場合でも、2 GB を超える連続するメモリを割り当てられません。
  • ユーザー仮想空間の合計量を取得するには 、GlobalMemoryStatusEx 関数を使用 します。 可能な限り高いユーザー アドレスを取得するには 、GetSystemInfo 関数を使用 します。 常に実行時に実際の値を検出し、 などのハードワイヤード定数定義を使用しないようにします #define HIGHEST_USER_ADDRESS 0xC0000000
  • 4GT 対応システムでアプリケーションがクラッシュする可能性があるポインターとの符号付き比較は避ける必要があります。 2 GB を超えるポインターの場合、次のような条件は false です if (pointer > 40000000)
  • アプリケーション定義の目的でポインターの最高ビットを使用するコードは、4GT が有効になっていると失敗します。 たとえば、32 ビットワードが 32 ビットより下の場合はユーザー モード アドレス0x80000000、上記の場合はエラー コードと見なされる場合があります。 これは 4GT では当てはめではありません。

VirtualAlloc は通常 、高いアドレスの前に低いアドレスを返します。 そのため、多くのメモリを割り当てるか、または断片化された仮想アドレス空間を持たない限り、プロセスで非常に高いアドレスを使用しない可能性があります。 テスト目的で下位アドレスより前に割り当てる割り当てを強制するには 、VirtualAlloc を呼び出す際に MEM TOP _ _ DOWN を指定するか、次のレジストリ値を 0x100000 に設定します。

HKEY _LOCAL _ MACHINE \ System \ CurrentControlSet \ Control \ Session Manager Memory \ Management \ AllocationPreference

リリースのメモリWindows制限

Physical Address Extension (物理アドレス拡張)

4GT テクニカル リファレンス