我可以将VirtualAlloc写入可写的“丢弃”垃圾范围吗?

时间:2019-10-07 02:11:52

标签: winapi virtual-memory virtual-address-space

Win32 中是否可以通过VirtualAlloc获得可写(或仅写)范围的“垃圾”虚拟地址空间( ie ), VirtualAlloc2VirtualAllocEx或其他)不需要永久保存,因此理想情况下永远不需要物理内存或页面文件支持?

这将是内存中的“空洞”。

该方案用于模拟顺序存储器写入操作的试运行,以获取其实际消耗的大小。您将能够使用与实际写入完全相同的代码,但是传入一个无支持的“垃圾”地址范围,该地址范围实际上会忽略或丢弃写入其中的任何内容。在此示例中,“无效”地址范围的大小将是该操作的某个已知最大值,而您只关心前进指针的最终值。

[edit:] 有关最聪明的答案,请参见评论部分。即:依次映射单个4K页面多次,并覆盖整个“空”范围

1 个答案:

答案 0 :(得分:1)

这是不可能的。如果您有尝试写入内存的代码,则虚拟内存需要支持某些内容。

但是,如果您修改了代码以使用流模式,那么您可以提供一个忽略写入并仅跟踪大小的流实现。