从C++获取进程的内存使用情况

问题描述 投票:0回答:2

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

网络上有几个页面(如这个答案)建议以下内容:

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如何查看进程的内存使用情况?

c++ macos memory
2个回答
0
投票

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


0
投票

您需要 TASK_VM_INFO,并且需要“phys_footprint”成员。 在所有 Apple 操作系统上,您只需为“脏(写入)”和“有线”内存付费。 映射文件有一些有趣的边缘情况,但我不会讨论这些。

这就是现在 top 和 Xcode 使用的。

© www.soinside.com 2019 - 2024. All rights reserved.