0

我想确保长时间运行的数字运算算法不会使用太多内存。该算法用 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 中的“总字节数”数字:Instruments ObjectAlloc: Explanation of Live Bytes & Total Bytes。当我在活动监视器中检查进程时,“真实内存”基本上是恒定的。

4

1 回答 1

1

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

总虚拟内存是可用交换空间加上 RAM 的大小。我无权访问 OSX,我知道它按自己的规则运行,但必须有一个命令显示交换使用情况

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

我想出的唯一命令是vm_stat, plus top - 它似乎 top 可能最接近我所说的。

于 2013-02-23T01:22:57.563 回答