장기 실행 숫자 크런치 알고리즘이 너무 많은 메모리를 사용하지 않도록하고 싶습니다. 알고리즘은 C++로 작성하고 OS X의 (A)에 실행됩니다 대폭 단순화 된 버전입니다 :OS X에서 장시간 실행되는 프로세스에서 사용되는 메모리
int main() {
while (someCondition) {
// notice nothing is allocated on the heap
vector<int> v(10, 0);
}
}
내가 장치 (할당 및 누수)를 사용하여 코드를 프로파일했습니다. 누출은 보이지 않습니다. 그리고 "라이브 바이트"수는 정상적으로 보이지만 (20MB 정도), "전체 바이트 수"는 계속 증가합니다. "전체 개수"가 약 80GB에 달했을 때 하드 디스크 공간 부족에 대한 OS X 경고를 받았습니다 (120GB 솔리드 스테이트 디스크가 있음). 나는 OS/프로세스 상호 작용에 대해 많이 모른다. 그래서 내가 물어볼 줄 알았다.
첫 번째 프로세스가 종료되기 전에 다른 프로세스가 사용할 수있는 UNIX 기반 OS의 장기 실행 프로세스에 사용되는 메모리인가? 더 오래 달리기?
편집 : Instruments ObjectAlloc: Explanation of Live Bytes & Overall Bytes : 나는 악기에서 "전체 바이트"수를 잘못 해석하는 것 같은 보인다. Activity Monitor에서 프로세스를 체크 아웃 할 때 "실제 메모리"는 본질적으로 일정합니다.
사용량이 커지면 어딘가에서 힙에 할당되고 해제되지 않는다고 말해야합니다. – Celada
'valgrind'에서 프로세스를 실행 했습니까? 그렇지 않다면 왜 안 되겠습니까? 또는 더 중요한 것은 그렇게하십시오. 표시된 벡터 또는 다른 것이 든간에 누출 된 것이 있습니다. 찾아야합니다. 프로세스를 중단 할 수 있는지 확인하십시오. –