1

有谁知道 API Win32 中的函数VirtualAllocEx在我们调用它时是否可以分配多个页面?

例如我想分配 100Mo。我调用函数。分配的内存可以分成几页(一次调用)还是总是只分配一个具有确切大小的页面?

我执行了一些测试,它似乎只分配了一个具有确切大小的页面。我在这里问这个问题是因为 MSDN 上的以下文字让我感到困惑:

每个页面都有一个关联的页面状态。VirtualAllocEx 函数可以执行以下操作:

  • 提交保留页面的区域
  • 保留一个免费页面区域
  • 同时保留和提交一个空闲页面区域

那么,微软是说一般用这个函数分配内存(意思是我们可以通过多次调用分配几个页面)还是可以在一次调用中分配几个页面。

谢谢你。

4

2 回答 2

2

页面始终具有固定大小(例如 4Kb)。如果分配 16Kb,则分配 4 个页面,即使它们被分配为单个块。

如果你的意思是问是否VirtualAllocEx可以分配几个不同的内存块,那么不能,从它只返回一个指针来判断,它不能。它返回一个您请求的大小或更大的内存块。

于 2013-03-04T06:01:14.227 回答
1

VirtualAllocEx 将根据需要分配尽可能多的页面。页面具有以 KB 为单位的固定大小,因此如果分配 100Mb,它肯定会分配很多页面。我认为当您说页面时,您的意思有所不同。

于 2013-03-04T05:55:34.987 回答