1

API Win32の関数VirtualAllocExを呼び出すときに、複数のページを割り当てることができるかどうかを誰かが知っていますか?

たとえば、100Moを割り当てたいと思います。関数を呼び出します。割り当てられたメモリを複数のページに分割することはできますか(1回の呼び出しに対して)、または常に正確なサイズの1ページのみを割り当てますか?

いくつかのテストを実行しましたが、正確なサイズのページが1つだけ割り当てられているようです。MSDNの次のテキストで混乱するため、ここで質問します。

各ページには、関連付けられたページ状態があります。VirtualAllocEx関数は、次の操作を実行できます。

  • 予約ページの領域をコミットする
  • 無料ページの領域を予約する
  • 無料ページの領域を同時に予約してコミットします

それで、Microsoftはこの関数で一般的にメモリを割り当てることについて話しますか(つまり、複数の呼び出しで複数のページを割り当てることができます)、または1回の呼び出しで複数のページを割り当てることができます。

ありがとうございました。

4

2 に答える 2

2

ページのサイズは常に固定されています(たとえば、4Kb)。16Kbを割り当てる場合、単一のブロックとして割り当てられている場合でも、4ページを割り当てます。

いくつかの異なるメモリブロックをVirtualAllocEx割り当てることができるかどうかを尋ねる場合は、いいえ、ポインタを1つだけ返すことから判断すると、できません。要求したサイズ以上のメモリの1ブロックを返します。

于 2013-03-04T06:01:14.227 に答える
1

VirtualAllocExは、必要な数のページを割り当てます。ページのサイズはKB単位で固定されているため、100 Mbを割り当てると、確実に多くのページが割り当てられます。あなたがページと言うとき、あなたは何か違うことを意味すると思います。

于 2013-03-04T05:55:34.987 に答える