OS X上长时间运行的进程使用的内存

时间:2013-02-23 01:11:47

标签: macos unix memory-management

我想确保长时间运行的数字运算算法不会占用太多内存。该算法是用C ++编写的,可以在OS X上运行。一个极其简化的版本是:

int main() {
    while (someCondition) {
        // notice nothing is allocated on the heap
        vector<int> v(10, 0);
    }
}

我使用Instruments(分配和泄漏)分析了代码。我没有看到任何泄漏。虽然“实时字节”计数看起来很好(徘徊在20 MB左右),但“总字节数”计数仍在增长。关注我的是当“总计数”达到大约80 GB时,我收到了关于缺少硬盘空间的OS X警告(我有一个120 GB的固态磁盘)。我对操作系统/流程互动知之甚少,所以我想我会问:

在第一个进程被终止或不再运行之前,基于UNIX的操作系统上长时间运行的进程使用的内存是否可供其他进程使用?

编辑:看起来我误解了乐器中的“总字节数”:Instruments ObjectAlloc: Explanation of Live Bytes & Overall Bytes。当我在Activity Monitor中查看进程时,“真实内存”基本上是不变的。

1 个答案:

答案 0 :(得分:1)

获得磁盘空间警告的原因可能与虚拟内存分配有关。每当您的进程(或操作系统)请求内存时,通常首先在后备存储中交换“分配”。

虚拟内存总量是可用交换量加RAM的大小。我无法访问OSX,我知道它按照自己的规则播放,但必须有一个显示交换使用情况的命令

swap -l  (Solaris)
swap -s   (Solaris)
free (linux)

我提出的唯一命令是vm_stat,加上top - 它显得最高可能与我所说的最接近。