在VC环境下调用 VirtualFree函数,传递MEM_RELEASE|MEM_DECOMMIT参数,
与调用VirtualAlloc函数,传递MEM_RESET参数
两者之间有什么区别吗
另外ZeroMemory函数的作用是什么,一般在什么时候用到?
分不多了,如果哪位大侠能不吝赐教的话,我就再开帖给分
与调用VirtualAlloc函数,传递MEM_RESET参数
两者之间有什么区别吗
另外ZeroMemory函数的作用是什么,一般在什么时候用到?
分不多了,如果哪位大侠能不吝赐教的话,我就再开帖给分
PVOID Destination,
SIZE_T Length
);
传递1,那么也要清除4KB大小的RAM?还有什么情况下要使用ZeroMemory?
///////////////////////////////////////////////////////////////////////////////////////
VirtualFree函数大家应该常用的吧,传递MEM_RELEASE|MEM_DECOMMIT参数,表示释放系统页文件和RAM,我是这样理解的
为VirtualAlloc函数的第三个参数传递MEM_RESET参数,表示清除RAM(只在WIN2000下可行)
我有点搞不清楚,这两种方式有什么不同。是否我对WINDOWS内存管理还不够了解。
///////////////////////////////////////////////////////////////////////////////////////
我理解 RAM是系统页文件的一部分。因此RAM的内容和系统页文件是不重复的。
传递1,那么也要清除4KB大小的RAM?还有什么情况下要使用ZeroMemory?
-----------
当然不是。它不过就是调用memset(p,0,len)而已。VirtualAlloc(MEM_RESET)与 VirtualFree(MEM_RELEASE|MEM_DECOMMIT)是完全不同的意思。MEM_DECOMMIT是释放已经分配的内存,MEM_RELEASE是释放系统分配给你的一片内存地址(只有地址,没有内存)。MEM_RESET的用途,据我理解是这样的:当系统内存不足时,需要将某些页面保存至硬盘中的虚拟内存文件中;为了提高系统性能、节省一次写磁盘的操作,对于那些并不重要的内存,我们可以用MEM_RESET告诉系统不必保存它了,它不再有用。但是调用过MEM_RESET之后,我们还是可以对这块内存操作,它还是属于我们的。操作过之后,上一次调用的MEM_RESET就失效了。
非常精辟。
无以为报,惟有赠分