|
|
1
1
我不知道你的剧本里到底发生了什么。但我以前见过文件打开对话框导致其他内存问题。 当这个对话框被调用时,很多东西可能会被加载到您的进程中。特别是,出现在Windows资源管理器中的shell扩展也会随“文件打开”对话框一起加载。这样你就可以在对话框中右键点击一个文件,得到所有的非标准商品。但是,这意味着这些扩展的DLL正在加载到您的进程中。
我处理的结果是它影响了单个1GB内存分配的成功。在打开对话框之前,有大量的可用地址空间,1GB的分配可能会成功。但是,打开对话框后,几个shell扩展dll正好落在可用地址空间的中间,并将其划分为小于1GB的块,从而导致分配失败。 我知道这件轶事与你所做的事情没有直接关系,因为你分配了很多小的数量而不是一个大的数量。(在我的场景中,并没有使用malloc。我认为这是类似VirtualAlloc之类的东西。)但我猜大概也会发生类似的事情。 “文件打开”对话框可能正在将某些内容加载到进程中,从而在malloc通常使用的空间中插入了一个屏障。但不知何故,这只发生在您使用大堆栈大小时,因为我猜,为堆栈保留的额外99MB空间以某种方式重新排列了地址空间的其余部分,从而容易出现此问题。 当我调查自己的问题时 VMMap 在不同的点对进程的地址空间进行快照,以了解发生了什么。你这样做可能会有点运气。请注意,它看起来像操作系统看到的地址空间,而不是像你从上下文中看到的那样,一种特定的语言,如C++。因此,要找出malloc或任何其他分配机制正在使用的内存的特定部分并不一定容易。 |