2010-03-10 32 views
2

我经常看到VirtualAlloc调用保留内存失败。我请求2MB,以便分配不计入我的每个进程虚拟内存,而是使用系统共享内存。在发生故障时,系统报告物理内存中有超过100 MB的可用空间。尽管WinMobile有足够的物理内存,VirtualAlloc如何失败(无内存)?

我在Windows Mobile 6.1设备上运行。到目前为止,这是一个设备特定的问题。它适用于许多相同的设备,并在一台设备上出现故障。我希望能够确定此设备上的其他进程是否保留共享内存,从而阻止我这样做。不知道我该怎么做,但。

这是DOC我靠,我看没有什么会解释这个问题: http://msdn.microsoft.com/en-us/library/aa908768.aspx

任何想法?谢谢。

+1

传递给VirtualAlloc的* all *参数的值是多少? – vladr 2010-03-10 21:58:05

+0

pHeap =(unsigned char *)VirtualAlloc(0,1024 * 1024 * 2,MEM_RESERVE,PAGE_NOACCESS); – glutz78 2010-03-10 22:11:05

回答

3

我很想说VirtualAlloc已经用完了(连续的)虚拟地址空间,至少就您的过程而言。

我首先尝试建立to which memory slot那些以前成功的VirtualAlloc块映射到,并基于这看到我为谁争取地址空间。您应该可以通过编程方式或使用a tool from William J. Blanke(或other similar tools)执行此操作。

+0

我很想同意。 – ctacke 2010-03-11 02:20:34

+0

感谢您的链接。你是否暗示在我的应用程序的32 MB空间中没有连续的块(这是否意味着'至少就你的过程而言'?)。 是不是总的想法,大2MB的分配是从较高的共享内存区域采取的,所以它不涉及我的应用程序的虚拟地址空间?在这种情况下,我可以想到的这个失败的唯一原因是另一个进程也在积极保留共享内存。据我所知,这并没有发生。我错过了什么吗?谢谢。 – glutz78 2010-03-11 03:42:38

+0

请阅读http://www.tech-archive.net/Archive/WindowsCE/microsoft.public.windowsce.embedded.vc/2004-11/0364.html - 有关'VirtualAlloc'的部分有时来自您的过程'区域可能从未如此,或者可能不再是真实的,但它值得考试。您是否可以使用William的工具(或远程内存查看器)和/或记录哪个插槽(Windows CE 5)'VirtualAlloc'为地址服务,导致故障? – vladr 2010-03-11 04:39:55

相关问题