2

我的机器有 8GB 的​​ RAM 并且正在运行 Windows Server 2008。当我的应用程序已经分配了 1.5~1.7GB 时,malloc/realloc()无法分配更多内存。我尝试改用HeapAlloc/HeapRealloc并发生同样的情况。

我在这里缺少什么吗?当有明显可用的 RAM 时,什么可能导致我的应用程序无法分配更多内存?

4

3 回答 3

4

您的机器中有多少 RAM 并不重要。Windows 上的每个 32 位进程获得一个 4GB 的地址空间,其中 2GB 可用于用户地址空间。因此,您的程序(包括其代码、加载的 dll、堆栈等)的内存将仅从该空间分配。由于您接近虚拟地址空间的限制,因此内存分配失败。

于 2010-12-08T09:34:11.920 回答
2

默认情况下,在 Windows 32 位操作系统上,您可以将 2DB 用于一个进程。如果你使用 MSVC 编译器,你必须设置LARGEADDRESSAWARE选项。

于 2010-12-08T09:33:40.220 回答
1

当有明显可用的 RAM 时,什么可能导致我的应用程序无法分配更多内存?

堆碎片。分配不只是要求内存。它要求一块连续的内存。

当然,鉴于您提供的稀疏数据(发生这种情况时您要重新分配多少?这是32 位还是 64 位应用程序?),也可能存在其他问题。

于 2010-12-08T09:32:27.080 回答