【发布时间】:2010-11-30 02:19:21
【问题描述】:
我们的应用程序在一个特定用户的计算机上失败,ERROR_NOT_ENOUGH_MEMORY(“没有足够的存储空间来处理这个命令”)。
这个错误显然是在我们使用的 Delphi VCL 框架的某个深处引发的,所以我不确定哪个 Windows API 函数负责。
内存有问题吗?调用GlobalMemoryStatus会提供以下信息:
- dwTotalPhys - 1063150000 (~1 GB)
- dwAvailPhys - 26735000 (~27 MB)
- dwAvailPage - 1489000000 (~1.4 GB)
当页面文件中有这么多可用空间时,Windows 会让可用物理内存变得如此之低,这对我来说似乎很奇怪,但我对 Windows 的虚拟内存管理了解不足,无法知道这是否正常或不是。是吗?
如果不是内存,那么会达到哪个资源限制?根据我在网上阅读的内容,ERROR_NOT_ENOUGH_MEMORY 可能是应用程序达到多个限制(GDI 对象、USER 对象、句柄等),不一定是内存。是否有 Windows 强制执行的限制的完整列表?有什么方法可以找出正在达到的限制吗?我尝试了谷歌,但我找不到任何系统的概述。
【问题讨论】:
-
GDI 是我的第一个停靠港。虽然奇怪的是它只发生在一个用户的机器上,但这就是我要开始的地方。也可能是正在使用的手柄数量等。祝你好运!
标签: debugging memory-management out-of-memory