마지막 Q를 다시하십시오 - 짧은 버전 : 오류 메시지는 "커밋 된"가상 주소 공간에 대한 것입니다. 두 번째 화면 스냅 샷에서 Commit Charge 그래프를 보면 실제로 한계에 도달했음을 알 수 있습니다.
"사용 가능", "사용 가능"또는 "사용 중"인 RAM 양은 중요하지 않습니다. 특히 "사용 가능한"RAM의 부족은 "메모리 부족"또는 "메모리 부족"메시지의 이유가 아닙니다.
커밋 제한은 총 RAM + 페이지 파일 크기와 같습니다. 커밋 된 메모리가 할당되면 실제로 사용되지는 않았지만 즉시 "커미트 요금"으로 청구됩니다. 즉 RAM 또는 PF 공간이 즉시 사용되지 않음을 의미합니다. 실제 공간 (RAM 또는 페이지 파일에 있음)은 메모리가 실제로 참조 될 때만 사용됩니다. 그때부터 프로그램이 해제하거나 전체 프로세스가 끝날 때까지 어느 정도 있어야합니다.
예 : 페이지 파일이 없다고 가정하면 커밋 제한은 16GB (RAM 크기)입니다. 이제 각각 8 개의 프로세스가 VirtualAlloc (MEM_COMMIT) 1GB를 시도한다고 가정합니다. 결과 : Commit charge가 8GB 증가합니다. RAM에 즉각적인 영향은 없습니다. 그것은 마치 문구점에서 종이 패드를 구입 한 것과 같지만 실제로 종이를 얻지는 않았습니다. 새로운 시트가 필요할 때마다, 마술처럼 하나의 시트가 나타납니다. 전체 패드 (할당 된 영역의 크기)를 모두 사용할 때까지.
이제 각 프로세스가 실제로 1GB에서 100MB 만 액세스한다고 가정합니다. 사용 된 RAM은 800MB입니다.
그러나 각자 힘 그것의 1GB 전부를 참조하십시오, OS는 8GB의 RAM + 페이지 파일 공간을 보장해야합니다 ... 글쎄, 페이지 파일이없는 경우의 RAM만이 가능한 경우에 대비하여 유지됩니다. 문구점으로 돌아가서, 그들은 이전에 구입 한만큼의 시트를 모든 사람들에게 줄 수있을만큼 충분한 종이를 재고 할 필요가 있습니다.
따라서, OS는 VirtualAlloc (MEM_COMMIT)이 커밋 된 현재 양이 한계에 도달 할 때 성공하는 것을 중지해야합니다.
왜? 프로세스가 VirtualAlloc의 결과를 확인하여 성공했는지 확인해야하기 때문입니다. 일단 그렇게하고 alloc이 성공했다면 프로세스는 커밋 된 전체 영역에 대한 후속 참조가 성공할 것으로 기대할 수있는 모든 권리를가집니다.
Windows가 커미션 요금이 해당 공간을 인식 할 수있는 공간의 양을 초과하도록 허용 한 경우, 그 기대치는 항상 충족 될 수는 없습니다.
빠른 해결 방법은 페이지 파일의 기본 (= 초기) 크기를 늘리는 것입니다. 위의 설명에서 오류 메시지가 표시되지 않는 이유를 알 수 있어야합니다. 비록 그 파일에 아무것도 쓰여지지 않을지라도 . 다시 말하지만, OS는 모든 커미트 비용을위한 공간이 확보되도록 보장합니다. 필요하다면 . 프로세스가 커밋 된 메모리를 할당 할 때 그들은 단지 "헤이, OS, 나 힘 이것을 많이 필요로합니다. "그렇다고해서 실제로 사용하게 될 것은 아니며, 실제로 사용했음을 의미하는 것은 아닙니다.
자세한 내용은 다음을 참조하십시오. 내 대답은 여기에 .
지금.... 왜 당신은 당신의 프로세스가 그것에 추가되지 않는 것처럼 커밋을 많이 사용하고 있습니다. 또 다른 질문입니다. 보고 시작하려면 작업 관리자의 성능 탭, 메모리 섹션을 표시하십시오.