获取Windows中最低的可用虚拟内存地址

时间:2010-07-08 18:33:56

标签: memory-management dynamic-memory-allocation virtual-memory virtualalloc

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

为什么我需要它:尝试在Windows下构建malloc实现。如果不可能,当给定NULL作为第一个参数时,我将不得不真正地返回VirtualAlloc()返回的任何内容。虽然你会期望它做一些合理的事情,比如在可用的底部分配内存,但是没有任何保证。

2 个答案:

答案 0 :(得分:2)

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

我会说除非你需要连续的内存块,否则试图将所有内容保持在一起几乎是没有意义的,因为如果两个虚拟内存页可能在地址空间中彼此相邻,则没有理由认为它们是在物理记忆中彼此靠近。实际上,即使它们在某个时间点彼此接近,如果这些页面被移动到后备存储区然后再次出现在内存中,该页面也不会出现故障到同一个物理地址页面。

答案 1 :(得分:0)

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