【问题标题】:Get total system memory without external tools无需外部工具即可获得总系统内存
【发布时间】:2010-07-09 12:38:25
【问题描述】:

要获得总安装 RAM,我可以使用 popen("sysctl -n hw.memsize", "r"),但是是否有一些库可以在不运行外部工具的情况下获取此信息?

【问题讨论】:

  • 让您的程序根据可用的总内存做出决定通常是个坏主意。更好的设计是让用户配置允许使用多少内存。通常,当程序自己检查可用内存时,它们会将其视为所有(或大部分)内存属于它们,而实际上它与其他进程(可能还有其他用户)共享。
  • 您可以阅读我的目标:stackoverflow.com/questions/3211063/… 我编写了该脚本,默认情况下它释放了 1/8 的已安装内存(当我总共有 4Gb 时我需要 512Mb),所以我需要找出这是多少,我也可以使用参数指定要释放多少内存。有时间我会把它放在某个地方:)

标签: c macos memory


【解决方案1】:

sysctl

您可以使用sysctl(更多详情here

本节中使用的符号是 在文件 sysctl.h 中声明。 — 功能:

int sysctl (int *names, int nlen, void *oldval, size_t *oldlenp, void *newval, size_t newlen)

getrusage

getrusage

#include <sys/resource.h> 

int getrusage(int who, struct rusage *usage); 

struct rusage {
    struct timeval ru_utime; /* user time used */
    struct timeval ru_stime; /* system time used */
    long   ru_maxrss;        /* maximum resident set size */
    long   ru_ixrss;         /* integral shared memory size */
    long   ru_idrss;         /* integral unshared data size */
    long   ru_isrss;         /* integral unshared stack size */
    long   ru_minflt;        /* page reclaims */
    long   ru_majflt;        /* page faults */
    long   ru_nswap;         /* swaps */
    long   ru_inblock;       /* block input operations */
    long   ru_oublock;       /* block output operations */
    long   ru_msgsnd;        /* messages sent */
    long   ru_msgrcv;        /* messages received */
    long   ru_nsignals;      /* signals received */
    long   ru_nvcsw;         /* voluntary context switches */
    long   ru_nivcsw;        /* involuntary context switches */
};

【讨论】:

    【解决方案2】:

    您可以使用 api getrusage

         int who = RUSAGE_SELF;
        struct rusage usage={0,};
        int ret=0;
        ret = getrusage(who, &usage);
    

    查看rusage 的结构并选择您关心的值。

    【讨论】:

    • 它会给我进程内存使用情况,而不是可用的总内存
    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2011-12-29
    • 2018-09-14
    • 1970-01-01
    • 2011-11-07
    相关资源
    最近更新 更多