更新:2007 年 11 月
提供一些方法,这些方法使公共语言运行库 (CLR) 可以通过宿主而不是使用标准 Win32 虚拟内存函数来请求虚拟内存。
interface IHostMemoryManager : IUnknown {
HRESULT CreateMAlloc (
[in] BOOL fThreadSafe,
[out] IHostMalloc **ppMalloc
);
HRESULT VirtualAlloc (
[in] void* pAddress,
[in] SIZE_T dwSize,
[in] DWORD flAllocationType,
[in] DWORD flProtect,
[in] EMemoryCriticalLevel dwCriticalLevel,
[out] void** ppMem
);
HRESULT VirtualFree (
[in] LPVOID lpAddress,
[in] SIZE_T dwSize,
[in] DWORD dwFreeType
);
HRESULT VirtualQuery (
[in] void* lpAddress,
[out] void* lpBuffer,
[in] SIZE_T dwLength,
[out] SIZE_T *pResult
);
HRESULT VirtualProtect (
[in] void* lpAddress,
[in] SIZE_T dwSize,
[in] DWORD flNewProtect,
[out] DWORD* pflOldProtect
);
HRESULT GetMemoryLoad (
[out] DWORD* pMemoryLoad,
[out] SIZE_T *pAvailableBytes
);
HRESULT RegisterMemoryNotificationCallback (
[in] ICLRMemoryNotificationCallback* pCallback
);
HRESULT NeedsVirtualAddressSpace(
[in] LPVOID startAddress,
[in] SIZE_T size
);
HRESULT AcquiredVirtualAddressSpace(
[in] LPVOID startAddress,
[in] SIZE_T size
);
HRESULT ReleasedVirtualAddressSpace(
[in] LPVOID startAddress
);
};
方法
方法 |
说明 |
---|---|
通知宿主公共语言运行库 (CLR) 已从操作系统中获得了指定的内存。 |
|
获取指向 IHostMAlloc 实例的接口指针,该实例用于向宿主创建的堆请求内存分配。 |
|
由按宿主的报告,获取当前正在使用的物理内存量。 |
|
通知宿主 CLR 将要尝试使用指定的内存。 |
|
注册一个指向某回调函数的指针,宿主通过调用该回调函数来通知 CLR 计算机上的当前内存负载情况。 |
|
通知宿主 CLR 已完成使用指定内存的过程。 |
|
充当对应 Win32 函数的逻辑包装,Win32 函数将保留或提交调用进程的虚拟地址空间中的页面区域。 |
|
充当对应 Win32 函数的逻辑包装,Win32 函数将释放、解除或者释放并解除调用进程的虚拟地址空间中的页面区域。 |
|
充当对应 Win32 函数的逻辑包装,Win32 函数将更改对调用进程的虚拟地址空间中已提交页面区域的保护。 |
|
充当对应 Win32 函数的逻辑包装,Win32 函数将检索有关调用进程虚拟地址空间中的页面区域的信息。 |
备注
IHostMemoryManager 还为 CLR 提供获得指针的方法,通过指针既可以向堆请求内存,又可以按宿主的报告获取进程中的内存压力级别。
要求
**平台:**请参见 .NET Framework 系统要求。
**头文件:**MSCorEE.idl
**库:**作为一项资源包含在 MSCorEE.dll 中
**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0