2013-02-23 90 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

相關問題