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 を有効にするには、Boot.ini ファイルに /3gb スイッチを追加します。 /3gb スイッチは、次のシステムでサポートされています。

  • Windows Server 2003
  • Windows XP Professional

/3gb スイッチを使用すると、3 GB の仮想アドレス空間をアプリケーションで使用できるようになり、システムで使用可能な量を 1 gb に減らすことができます。 Windows Server 2003 では、アプリケーションで使用できるアドレス空間の量を調整できます。そのためには Boot.ini の /userva スイッチを2048から3072の値に設定します。これにより、システムで使用できるアドレス空間の量が増加します。 これにより、アプリケーションで 2 GB 以上のアドレス空間が必要な場合に、システム全体のパフォーマンスを維持することができます。

アプリケーションでより大きなアドレス空間を使用できるようにするには、イメージヘッダーで、 画像 _ ファイルの _ 大きい _ アドレスを _ 認識 するフラグを設定します。 Microsoft Visual C++ に含まれるリンカーは、このフラグを設定するために /LARGEADDRESSAWARE スイッチをサポートしています。 このフラグを設定し、4GT がサポートされていないシステムでアプリケーションを実行すると、アプリケーションに影響を与えることはありません。

Windows の64ビットエディションでは、 イメージ _ ファイルの _ 大きな _ アドレスを _ 認識 するフラグでマークされた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ビット単語が0x80000000 未満の場合はユーザーモードアドレスと見なされ、上記の場合はエラーコードと見なされます。 これは、4GT では当てはまりません。

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

HKEY _ローカル _ コンピューター \ システム の \ CurrentControlSet \ コントロール \ セッションマネージャー の \ メモリ管理 の \ 設定

Windows リリースのメモリ制限

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

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