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