2009-04-28 39 views

答えて

8

依存します。非ページプールは、RAMにとどまらなければならないメモリ用に予約する必要があります。そのため、ディスク操作によるメモリページの影響を受ける重大な処理を行っている場合は、非ページングを使用します。

詳細はhereを参照してください。

this(ただしCとは異なり、C++について説明しています)を見ると、デフォルトではグローバルは#pragmaのいずれかに置かれるように見えます。また、p22のに、これを行う方法があります。最後にthis discussここでは、データセグメントはデフォルトでページング不可能でなければならないことがわかります。

+0

No.myの質問が気にいらないのですか?(ローカル変数は非ページプールメモリを使用します)。 – Navaneeth

+0

それは依存しません。 ページングプールまたは非ページプールのいずれかになります。 – Navaneeth

+2

#pragma data_seg( "PAGE")int foo; #pragma data_seg( "NONPAGE")int bar; - fooはページング可能で、barはページングされません。プラグマを指定しないと、デフォルトは非ページングになります。 – SecurityMatt

2

カーネルモードドライバのグローバル変数は、NonPagedPoolから割り当てられます。

(IoCreateDeviceを呼び出すと)デバイス拡張を使用することもできます。デバイス拡張は、常にNonPagedメモリから割り当てられます。私はつまり、ページプールメモリまたは非ページプールメモリ、メモリが使用されるデバイスドライバでグローバル変数を宣言するかのように私はこれが役に立てば幸い

、 マーティン

+1

これは当てはまりません。 Windowsのカーネルドライバは複数のセクションを持つPEファイルで、通常のユーザーモードプログラムとは異なり、KMドライバは通常、* 2つの*データセクションを持っています - 1つはページングされ、もう1つはページングされません(そして、 KMドライバが初期化されました)。あなたのコードでは、allocプラグマを使ってあなたの変数(あるいは実際には関数)をページングするのか、非ページ化するのかを選択できます。 – SecurityMatt

関連する問題