2013-02-23 91 views
0

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

+1

我不得不说,如果使用量正在增长,那么某个地方正在被分配到堆上,而没有被释放。 – Celada 2013-02-23 01:17:31

+0

你在'valgrind'下运行了这个进程吗?如果不是,为什么不呢?或者,更重要的是,这样做。有东西在泄漏,无论是显示的矢量还是其他东西,而且您需要找到它。确保你可以停止你的过程。 – 2013-02-23 01:28:55

回答

1

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

虚拟内存总量是可用swap和RAM的大小。我没有进入OSX,我知道这起由它自己的规则,但必须有显示互换使用命令

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

我想出的唯一命令是vm_stat,加上top - 它出现顶端可能是最接近我所说的。

+0

Mac OS X上的命令不是“交换”。我不确定它是什么,但它不是(或者至少在'/ bin','/ usr/bin','/ sbin','/ usr/sbin'中没有'swap' ,Mac OS X 10.7.5上的'/ usr/local/bin')。这不会使你的答案无效......它只是限定了它。 – 2013-02-23 01:27:55

+0

@Johnathan - 你是对的我正在试图展示类UNIX命令的工作elsehwere,我可以挖掘OSX。编辑。 – 2013-02-23 02:23:52

相关问题