모두 내 프로그램에 메모리 문제가있을 수 있으므로 다양한 도구에서 제공하는 메모리 사용에 대한 정보를 찾으려고합니다. 원인을 찾기 위해 간단한 실험도합니다. 릴리스 모드에서, 나는 다음과 같은 코드, 코드가 실행momory가 할당되면 작업 관리자의 실제 메모리가 변경되지 않습니다.
pChar = new char[((1<<30)/2)];
for(int i; i < ((1<<30)/2); i++)
{
pChar[i] = i % 256;
}
를 추가, Windows 작업 관리자에서 사용 가능한 실제 메모리는 변경되지 않습니다. 필자의 견해로는 컴파일러가 코드를 제거하여 성능을 향상시킬 수 있습니다. 변수를 하나의 전역 변수로 선언합니다. 작동하지 않습니다. 그러나 디버그 모드에서는 Windows 작업 관리자의 사용 가능한 실제 메모리가 예상대로 변경됩니다. 나는 그것을 이해할 수 없다.
다른 질문이 있습니다. 실제 메모리가 부족한 경우 새 작업에서 가상 메모리의 메모리를 할당합니다. 아니면 하나의 예외가 throw됩니까?
감사합니다. 메모리가 가상 메모리에 할당되면 프로그램이 느리게 실행됩니까? 결정은 컴파일러 또는 운영 체제에 의해 만들어진 것입니까? –
모든 할당은 가상 메모리를 대상으로하므로 "가상 메모리가 부족할 경우"라는 질문은 의미가 없으므로 결정을 내릴 수 없습니다. RAM은 나중에 OS에 의해 할당 될 때 할당되며 필요에 따라 할당됩니다. – MSalters