2013-02-23 1 views
0

장기 실행 숫자 크런치 알고리즘이 너무 많은 메모리를 사용하지 않도록하고 싶습니다. 알고리즘은 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에서 프로세스를 체크 아웃 할 때 "실제 메모리"는 본질적으로 일정합니다.

+1

사용량이 커지면 어딘가에서 힙에 할당되고 해제되지 않는다고 말해야합니다. – Celada

+0

'valgrind'에서 프로세스를 실행 했습니까? 그렇지 않다면 왜 안 되겠습니까? 또는 더 중요한 것은 그렇게하십시오. 표시된 벡터 또는 다른 것이 든간에 누출 된 것이 있습니다. 찾아야합니다. 프로세스를 중단 할 수 있는지 확인하십시오. –

답변

1

디스크 공간 경고를받는 이유는 아마도 가상 메모리 할당과 관련이 있습니다. 프로세스 (또는 OS)가 메모리를 요청할 때마다 일반적으로 백업 스토어 스왑에서 먼저 "할당"됩니다.

총 가상 메모리는 사용 가능한 스왑 + RAM의 크기입니다. 나는 OSX에 액세스 할 수없는, 나는 그것의 자신의 규칙에 의해 재생 알고 있지만, 스왑 사용량을 표시하는 명령이 있어야

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

내가 함께했다 유일한 명령 vm_stat, 플러스 top - 그것은 나타납니다 top은 아마도 내가 말하는 것에 가장 가깝습니다.

+0

Mac OS X의 명령은 '스왑'되지 않습니다. 나는 그것이 무엇인지는 모르지만, 적어도/bin,/usr/bin,/sbin,/usr/sbin에 스왑이 없다. ,'/ usr/local/bin' (Mac OS X 10.7.5에서는). 그건 당신의 대답을 무효로하지 않습니다 ... 그냥 자격. –

+0

@ Johnathan - 네가 맞다. 나는 OSX 용으로 파고들 수있는, 유닉스 계열 명령에 elsehwere 명령을 보여 주려고했다. 편집을 완료했습니다. –

관련 문제