什么导致内存保留

Posted

技术标签:

【中文标题】什么导致内存保留【英文标题】:What cause memory reservation 【发布时间】:2010-12-14 10:04:13 【问题描述】:

我有一个用 C++ 编写的应用程序,它保留了 1.2GB 内存,但只提交了 600MB。 该应用程序使用 COM/DCOM、ADO。

我想问你是否知道为什么有这么多内存被保留而从未提交?

谢谢

【问题讨论】:

你有多少线程在运行? 这篇(相当旧的)知识库文章是否适用于您的案例support.microsoft.com/kb/193026? 【参考方案1】:

应用程序可能故意为某些分配器保留一个大区域,并且仅在实际需要时提交较小的区域。如果是这种情况 - 在您让应用程序实际向分配器请求内存分配并且它确实提交内存之前,它们不会被提交。

【讨论】:

谢谢你知道哪个分配器可以做到这一点吗? @mathk:我们公司有一个非常简单的内部分配器,它的行为就是这样,所以我想几乎任何合格的开发人员都可以编写一个,它可以是任何东西,所以没有机会猜测. 好吧,我正在整个项目中搜索 VirtualAlloc,但找不到。保留内存还有其他功能吗? @mathk:我不知道有任何其他类似的功能。可能是一些中间件(如 ADO)或一些进行内存预留的第三方库。 你说得对,问题似乎是 ADO。通过仅隔离 ADO 部分,我们保留了 800MB 内存,仅提交了 7MB

以上是关于什么导致内存保留的主要内容,如果未能解决你的问题,请参考以下文章

带有 UI 和内存泄漏的保留片段

此 CAAnimation 会导致泄漏或保留周期吗?

服务器JVM不保留内存

iOS UIImagePickerController 和 UIWebView 导致内存问题;呈现这些视图时如何保留我的应用程序的状态?

vm/min_free_kbytes - 为啥要保留最小保留内存?

分配的内存和保留的内存有啥区别?