【问题标题】:Get memory usage of a process from C++从 C++ 获取进程的内存使用情况
【发布时间】:2015-03-11 01:10:53
【问题描述】:

我正在尝试确定当前进程在 Mac OS X 上使用了多少内存。具体来说,top 如何计算每个进程的 MEM 列中显示的值?活动监视器在“内存”选项卡上的每个进程的“内存”列中显示相同的值。

网络上有几个页面(如this answer)建议如下:

struct task_basic_info tinfo;
mach_msg_type_number_t count = TASK_BASIC_INFO_COUNT;
task_info(
    mach_task_self(), TASK_BASIC_INFO,
    (task_info_t) &tinfo, &count);
// memory usage is in tinfo.resident_size;

但返回的值几乎相差 2 倍(例如,顶部显示 64 MB,而此代码报告 105 MB)。 top 和 Activity Monitor 如何找到进程的内存使用情况?

【问题讨论】:

  • 您能否检查top 字段rprvt 是否与此代码的结果匹配?
  • @JohnZwinck RPRVT 字段小于 MEM 字段。目前的值为:MEM:63M,RPRVT:45M,VPRVT:170M,VSIZE:2679M。代码片段报告100M
  • 这里有类似问题:活动监视器 190MB,XCode 调试工具:244MB,task_info:320MB。最高报告为 XCode 244MB
  • 可执行文件/应用程序的大小如何?包括 - 不包括? (例如:居民大小)

标签: c++ macos memory


【解决方案1】:

基于我的 OSX 应用程序,所以听起来可能我错了。 Top/XCode 工具报告“new/malloc/?”分配的内存调用,例如:由代码本身执行的分配。相反,任务信息包括操作系统用于加载可执行文件的内存+您所做的所有分配。就我而言,我有一个 75MB 的增量,大约是我的调试版本的大小(不包括资源)。

【讨论】:

    猜你喜欢
    • 2010-10-24
    • 2011-05-07
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多