【发布时间】:2013-02-08 18:13:17
【问题描述】:
我想确保长时间运行的数字运算算法不会占用太多内存。该算法用 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 & Overall Bytes。当我在 Activity Monitor 中查看进程时,“真实内存”基本上是不变的。
【问题讨论】:
-
我不得不说,如果使用量像这样增长,那么某些地方正在堆上分配而不是释放。
-
你在
valgrind下运行过进程吗?如果不是,为什么不呢?或者,更重要的是,这样做。有些东西正在泄漏,无论是显示的矢量还是其他东西,您都需要找到它。确保你可以停止你的进程。
标签: macos unix memory-management