我想確保長時間運行的數字運算算法不會使用太多的內存。該算法是用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