我想确保长时间运行的数字运算算法不会占用太多内存。该算法是用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中查看进程时,“真实内存”基本上是不变的。
答案 0 :(得分:1)
获得磁盘空间警告的原因可能与虚拟内存分配有关。每当您的进程(或操作系统)请求内存时,通常首先在后备存储中交换“分配”。
虚拟内存总量是可用交换量加RAM的大小。我无法访问OSX,我知道它按照自己的规则播放,但必须有一个显示交换使用情况的命令
swap -l (Solaris)
swap -s (Solaris)
free (linux)
我提出的唯一命令是vm_stat
,加上top
- 它显得最高可能与我所说的最接近。