【发布时间】:2009-10-05 12:29:01
【问题描述】:
据我所知,在 win32 中,每个程序都会收到 4GB 的虚拟内存。内存管理器负责将内存块从物理内存卸载到磁盘。
这是否意味着 malloc 或任何其他内存分配 API 仅在达到虚拟限制时才会抛出 OUT_OF_MEMORY 异常?我的意思是即使程序远离其虚拟大小限制,malloc 也有可能失败,例如没有物理内存可以卸载到磁盘。假设磁盘有无限容量并且没有设置具体限制。
【问题讨论】:
-
"...现在应该清楚为什么“内存不足”错误通常与您拥有多少物理内存或可用存储量无关。几乎总是关于地址空间,在 32 位 Windows 上相对较小且容易碎片化......”所以碎片化了。
-
次要点:malloc() 失败将返回 NULL 而不是抛出异常。 new 抛出异常。至少这是它需要做的事情,操作系统可能会做其他事情,并且确实可能会根据失败的原因做不同的事情。
标签: c++ c memory-management winapi