제목에 묻습니다. "사용 가능한 메모리를 어떻게 계산합니까?"
답변 : OS에 작업을 수행해야하는지 묻습니다.
보다 구체적으로, 메모리 관리 서브 시스템에 질문한다. Sheepsimulator가 주석에서 언급했듯이, 리눅스 커널은 모든 종류의 OS 유지 데이터를 가상 파일 시스템의 /proc
에 공개하지만 모든 풀 서비스 OS는 데이터 종류를 추적해야하므로 free
에 API를 제공하는 것은 중요하지 않습니다. 용도.
질문 : "모든 프로세스에 대해보고 된 VmSize를 추가하는 것과 왜 다른 점이 있습니까?"
답변 : 적어도 것은 리눅스는 실제로 할당하지 않고 프로그램에 메모리를 약속합니다 여기
- 진행에있다.
char *p=new(1024*1024*1024*sizeof(char));
할 때 커널이 나가지 않고 바로 기가 바이트를 얻을 수 있습니다. "OK"라고 말하면 수치를 사용하기 시작하면 수치가 표시됩니다. 따라서 악명 높은 사람들의 필요성은 OOM killer입니다.
- 동적 라이브러리는 공유되며 실제 메모리의 단일 페이지는 둘 이상의 프로세스의 가상 주소 공간에 매핑 될 수 있습니다.
또한, proc 파일 시스템을 통한 전달은 원 자성이 아닙니다.
출력은 free
의 출력이 주어진 순간에 컴퓨터의 실제 메모리 사용을보다 정확하게 반영한다는 결론에 도달했습니다.
나는 자유 참조/proc/meminfo를 믿는다. –
프로세스의 VmSize와 프로세스의 사용 된 메모리는 직접적인 관계가 없다. 예를 들어 프로세스가 비디오 카드 메모리를 매핑하면 VmSize에 추가되지만 사용 된 메모리는 추가되지 않습니다. "가상 메모리"를 의미하는 ServerFault의 비슷한 대답을 확인하십시오. http://serverfault.com/questions/48582/how-is-memory-usage-reported-in-linux/48610#48610 – Juliano
"cat/proc/*/status | grep VmSize' "쓸데없는 고양이 사용. 'grep VmSize/proc/*/status'를 선호합니다. 여전히 원자가 아니지만 최소한 포크와 파이프 라인은 아끼지 않습니다. – dmckee