gpt4 book ai didi

winapi - 如何取消提交文件映射页面?

转载 作者:行者123 更新时间:2023-12-04 06:47:48 25 4
gpt4 key购买 nike

我有一个内存映射文件,以及当前提交的 View 中的一个页面。我想取消它。 MapViewOfFile 告诉我不能在文件映射页面上使用 VirtualFree。有没有其他方法可以做到?

最佳答案

你不能取消它,但你真正想要的不是取消它......

您真正想要的是从内存中释放页面。这可以通过使用 VirtualUnlock 来完成。见 VirtualUnlock Remarks :

Calling VirtualUnlock on a range of memory that is not locked releases the pages from the process's working set.



注意:如文档所述,该函数将返回 FALSE(页面未锁定)并且 GetLastError 将返回 ERROR_NOT_LOCKED。

这在 Guillermo Prandi's question CreateFileMapping, MapViewOfFile, how to avoid holding up the system memory 中有描述.

备注:我认为您可以这样看待它:取消提交映射页面是无稽之谈 - 每当它由物理存储支持时,页面就会被提交,无论是内存还是文件。从这个意义上说,文件映射页面不能被取消提交,因为它将始终由文件支持。

但是, the question mentioned 中的代码正在测量内存占用量,但什么是测量值并不具有代表性,因为从进程工作集中删除页面的事实并不一定意味着它不再存在于内存中。

我进行了一个不同的实验,测量从内存映射页面读取一个字节需要多长时间。解锁页面或取消映射 View 并关闭映射句柄后,访问仍然很快。

为了使访问变慢(即真正从内存中丢弃页面),有必要取消映射 View 并关闭内存映射句柄和文件句柄(最后一个令我感到惊讶,因为我期望取消映射 View 并关闭映射句柄就足够了)。

系统仍然有可能将 VirtualUnlocked 作为提示,一旦需要丢弃某些内容,它就会更快地丢弃页面,但这是我必须考虑的事情,但如何证明。

关于winapi - 如何取消提交文件映射页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3525202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com