我想确保长时间运行的数字运算算法不会使用太多的内存。该算法是用C++和运行在OS X甲彻底简化版本是:OS X上长时间运行的进程使用的内存
int main() {
while (someCondition) {
// notice nothing is allocated on the heap
vector<int> v(10, 0);
}
}
我异形使用仪器(分配和泄漏)的代码。我没有看到任何泄漏。尽管“活动字节数”计数看起来很好(徘徊在20 MB左右),但“总体字节数”计数仍在不断增长。我关心的是当“总数”达到80 GB时,我收到了有关缺少硬盘空间的OS X警告(我有一个120 GB固态硬盘)。我不太了解操作系统/进程交互,所以我想我会问:
在基于UNIX的操作系统上长时间运行的进程可用于其他进程的内存在第一个进程被终止之前或没有运行时间更长
编辑:看起来像我误解在仪器的“总字节数”数:Instruments ObjectAlloc: Explanation of Live Bytes & Overall Bytes。当我在活动监视器中查看进程时,“实际内存”基本上是不变的。
我不得不说,如果使用量正在增长,那么某个地方正在被分配到堆上,而没有被释放。 – Celada 2013-02-23 01:17:31
你在'valgrind'下运行了这个进程吗?如果不是,为什么不呢?或者,更重要的是,这样做。有东西在泄漏,无论是显示的矢量还是其他东西,而且您需要找到它。确保你可以停止你的过程。 – 2013-02-23 01:28:55