0

标题几乎说明了一切:有没有办法在 windows 下获得最低的空闲虚拟内存地址?我应该补充一点,我在程序开始时对这些信息感兴趣(在完成任何动态内存分配之前)。

为什么我需要它:尝试malloc在 Windows 下构建一个实现。如果不可能,我将不得不在VirtualAlloc()将 NULL 作为第一个参数时返回任何返回值。虽然您希望它做一些明智的事情,比如在可用的底部分配内存,但不能保证。

4

2 回答 2

2

这可以通过使用 VirtualQuery 查找标记为免费的页面来实现。不过会比较慢。(您还需要考虑与页面大小不同的分配粒度。)

我会说,除非您需要连续的内存块,否则尝试将所有内容靠近在一起几乎没有意义,因为如果两页虚拟内存在地址空间中可能彼此相邻,则没有理由假设它们彼此靠近其他在物理内存中。事实上,即使它们在某个时间点彼此靠近,如果这些页面被移动到后备存储然后故障返回内存,则该页面不会故障到相同的物理地址页面。

于 2010-07-08T18:46:29.523 回答
0

操作系统使用的指标比可用的“最低”内存地址更复杂。具体来说,VirtualAlloc分配内存页面,因此根据您的要求,至少一页未使用的地址空间必须在起始地址可用。因此,即使您认为应该使用“较低”地址,该地址也可能与您要求的操作不兼容。

于 2010-07-08T18:45:49.360 回答