문제

누군가 Solaris의 PRSTAT에서 얻은 크기와 RSS 값의 의미에 대한 명확한 설명을 할 수 있습니까?

메모리를 할당하는 테스트 C ++ 응용 프로그램을 작성했습니다. new[], 그것을 채우고 해방합니다 delete[].

내가 이해했듯이 크기 값은 프로세스에 의해 "예약 된"가상 메모리의 양과 관련이 있어야합니다. 즉, 메모리 "malloced"또는 "newed"입니다.

그 메모리는 실제로 사용하지 않는 한 RSS 값으로 요약하지 않습니다 (일부 값을 채우기). 그러나 메모리를 풀더라도 RSS는 떨어지지 않습니다.

나는 그 두 값에 올바르게 할당 할 수있는 의미 론적을 이해하지 못합니다.

도움이 되었습니까?

해결책

RSS는 프로세스가 얼마나 많은 물리적 메모리를 사용하는지 (AFAIK 안정적으로)입니다. Solaris Default Memory 할당기를 사용하면 메모리를 자유롭게하는 것은 RSS에 대해 아무것도하지 않습니다. 단지 일부 포인터와 값을 변경하여 메모리가 재사용 될 수 있다고 알려줍니다. 메모리를 다시 할당하여 다시 사용하지 않으면 결국에는 페이지가 나가고 RSS가 떨어집니다.

무료 직후에 해방 된 메모리를 반환하려면 Solaris MMAP 할당자를 사용할 수 있습니다.

export LD_PRELOAD=libumem.so
export UMEM_OPTIONS=backend=mmap

다른 팁

크기 모든 매핑 된 파일 및 장치를 포함하여 프로세스의 총 가상 메모리 크기입니다. RSS 거주자 세트 크기 여야하지만 완전히 신뢰할 수 없으므로 해당 정보를 얻으려고 노력해야합니다. 오후.

일반적으로 메모리가 프로세스에 할당되면 절대로 운영 체제에 다시 주어지지 않습니다. UNIX 시스템에서 SBRK () 호출은 프로세스 주소 공간을 확장하는 데 사용되며 다른 방향으로 이동하는 유사한 호출은 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top