技術メモ -64bit,Device Driver,Camera,programming-
Windows programmingとMachine Visionを中心にした、日頃気づいた技術をメモします。
プロフィール

iamhideyon

Author:iamhideyon
普通の技術者です。
職業プログラマしています。
主に画像入力、画像処理、
画像ビューアー、ネットワ
ークライブラリ等を開発し
ています。
日頃気になった技術や製品
のメモを自分のために、書
き溜めて置きます。アドバ
イスやご指摘がありました
らコメントをください。



カテゴリー



全記事(数)表示

全タイトルを表示



ブロとも申請フォーム

この人とブロともになる



リンク

このブログをリンクに追加する




にほんブログ村 IT技術ブログへ
Windows 200 / XP 3GBメモリ拡張について

W2KやXP 32ビットOSでは理論値で2GBまでmalloc/new/VirtualAllocできます。しかし画像処理やデータベースアプリケーションでは2GB以上のメモリを1プロセス(1アプリケーション)で使用する場合があります。2GBを超えるメモリ確保は次の二つで可能です。




4GB以上の物理メモリを搭載したPCのboot.ini  「/3GB」を追加


アプリケーションリンク時に /LARGEADDRESSAWARE を追加


*注意としては一度にmalloc / newできるのは2GB弱です。


http://www.microsoft.com/japan/whdc/system/platform/server/PAE/PAEmem.mspx 


http://msdn2.microsoft.com/ja-jp/library/wz223b1z.aspx




  • PAEオプション



4GB〜64GBの物理メモリを搭載したPCのboot.ini  「/PAE」を追加



[ローカルポリシー]→[ユーザー権利の割り当て]→[メモリ内のページロック]

ログインしているユーザー名を追加


*注意としては256MB程度の仮想メモリマッピング切り替えに数ミリ秒必要です。


以下サンプル抜粋。


#define WIN32WINNT 0x0500

#include <windows.h>


ULONG_PTR NumberOfPages = MEMORY_REQUESTED/sSysInfo.dwPageSize;


ULONG_PTR PFNArraySize = NumberOfPages * sizeof (ULONG_PTR);


ULONG_PTR p = (ULONG_PTR *) HeapAlloc(GetProcessHeap(), 0, PFNArraySize);



 Info.Count = 1;

 if( OpenProcessToken ( hProcess, TOKEN_ADJUST_PRIVILEGES, &Token))    Info.Privilege[0].Attributes = SE_PRIVILEGE_ENABLED;

 else              Info.Privilege[0].Attributes = 0;

LookupPrivilegeValue ( NULL, SE_LOCK_MEMORY_NAME, &(Info.Privilege[0].Luid));

AdjustTokenPrivileges ( Token, FALSE, (PTOKEN_PRIVILEGES) &Info, 0, NULL, NULL);


AllocateUserPhysicalPages( GetCurrentProcess(), &NumberOfPages,p);

lpMemReserved = VirtualAlloc(NULL,MEMORY_REQUESTED,MEM_RESERVE | MEM_PHYSICAL,PAGE_READWRITE);

MapUserPhysicalPages( lpMemReserved, NumberOfPages, p);

MapUserPhysicalPages( lpMemReserved, NumberOfPages, NULL );

FreeUserPhysicalPages( GetCurrentProcess(), &NumberOfPages, p);

VirtualFree( lpMemReserved, 0, MEM_RELEASE );

HeapFree(GetProcessHeap(), 0, p);


http://www.microsoft.com/technet/prodtechnol/windowsserver2003/ja/library/ServerHelp/e72dcdf6-fe17-49dd-a382-02baad31a137.mspx?mfr=true


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/awe_example.asp



テーマ:アプリケーション開発 - ジャンル:コンピュータ

Windows XP / Vista 起動時の必要物理メモリ

以下実測値です



  • Windows XP 32bit : 168MB

  • WIndows XP 64bit : 253MB

  • Vista CTP 32bit      : 478MB

  •  Vista CTP 64bit     : 635MB


 


テーマ:ソフトウェア - ジャンル:コンピュータ

物理アドレスと仮想アドレスについて

物理アドレスと仮想アドレスについてのメモ。




まとめ



  • 32bit(x86)物理アドレス空間:CPUから見ると 32-bit(4GB)

  • 32bit(x86)仮想アドレス空間 :1プロセスから見ると:31-bit(2GB)

  • 64bit(x64)物理アドレス空間:CPUから見ると 36bit(64GB)

  • 64bit(x64)仮想アドレス空間:64bitOSから見ると MSB 48bit(256TB)

  • 4GT RAM Tuning: 1プロセスで2GB以上3GB未満の仮想アドレス

  • Address Windowing Extensions(AWE): 4GBを超える大量のメモリを1つのプロセスで扱うための仕組み。AllocateUserPhysicalPagesのAPIで仮想アドレス空間内の領域を通して、 ページを切り替えながらメモリを読み書きする。予約されるメモリは非ページング メモリであり、そのプログラムのみがアクセスすることができます。 又、VirtualAllocでMEM_PHYSICALフラグで物理メモリを取得できます。



参考URLは以下「毛流麦花」さんのHPに詳細あります。


http://www.marbacka.net/asm64/arkiv/64bit_addressing.html



テーマ:プログラミング - ジャンル:コンピュータ





FC2 Blog Ranking FC2 Blog Ranking