感觉Windows Internals上交代的也不清楚,P399~400:
1.If an application creates 256-MB window in its address space and allocates 4GB of physical memory (on a system with more than 4GB of physical memory), the application can use the MapUserPhysicalPages or MapUserPhysicalPagesScatter Windows function to access any portion of the physical memory by mapping the memory into the 256-MB window.
2.The size of the application's virtual address space window determines the amount of physical memory that the application can access with a given mapping.
我估计Mark Russinvocih的意思是说:先VirtualAlloc是256MB,然后AllocateUserPhysicalPages是4GB,最后MapUserPhysicalPages还是256MB
不过再看看Jeffrey Richter的原话:
BOOL MapUserPhysicalPages(
PVOID pvAddressWindow,
ULONG_PTR ulRAMPages,
PULONG_PTR aRAMPages);
If the window is smaller than the number of pages you're attempting to map, the function fails.
而且Mark Russinvocih自己也说了:The size of the application's virtual address space window determines the amount of physical memory that the application can access with a given mapping.