首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C++查找32位Linux中的进程可用的剩余内存

问使用C++查找32位Linux中的进程可用的剩余内存
EN

Stack Overflow用户
提问于 2010-12-20 19:01:10
回答 2查看 1.3K关注 0票数 1

我的C++程序缓存了大量的对象,并且在每次主要的API调用开始时,我希望确保至少有500MB的空间可用于API调用。我可能耗尽了RAM+swap空间(考虑具有1 GB内存+1 GB交换文件的系统),或者我可能在我的进程中耗尽了虚拟地址。(我可能已经使用了总共4 GB地址空间中的3.7 GB)。对我来说,估计我缓存了多少数据并不容易,但如果它成为一个问题,我可以清除其中的一些,并迭代地这样做,直到我在系统或地址空间中有500MB可用(无论哪个成为瓶颈)。所以我的要求是在32位Linux上的C++中找到:

A)找出有多少RAM +交换空间可用。

B)我的进程可以使用多少用户空间地址空间。

C)进程已经使用了多少虚拟内存。可以认为它类似于Windows上进程的“提交大小”或“工作集大小”。

任何答案都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-20 20:16:30

查看vmstat的源代码:here。然后搜索domem()函数,该函数收集关于内存(已占用和空闲)的所有信息。

票数 0
EN

Stack Overflow用户

发布于 2010-12-21 16:11:11

查看/proc/vmstat,这里有很多关于系统级内存的信息。

/proc//映射将为您提供有关进程内存布局的大量信息。

请注意,如果您在运行长作业之前检查内存,另一个进程可能会吞噬所有可用内存,并且您的程序可能无论如何都会崩溃!

我对您的缓存类一无所知,但是如果这些对象非常小,那么您可能已经覆盖了new/delete操作符。这样就很容易跟踪内存消耗(至少通过计算对象),为什么不改变缓存策略呢?并刷新旧的未使用的对象。

另一种丑陋的方法是尝试分配几个内存块,并查看程序是否可以分配它,然后释放它。在32位上,它可能会失败,因为堆可能是碎片的,但如果它可以工作,您可以确定您此时有足够的内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4488990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档