2011-03-19 1 views
1

나는 사용자 정의 메모리 관리자를 작성하려고하고 있는데 지금 내가 좋아하는 바이트의 전역 배열을 할당하고있다 :물리적 메모리와 가상 메모리의 차이점 Visual C++?

char g_retail_memory[512*MB]; 

난 다음이 의 약 512 MB들을보고 윈도우 7의 리소스 모니터에서 볼 때 가상 메모리가 할당되었습니다. 누군가 내가 왜 실제 메모리를 얻지 못하게 설명 할 수 있습니까? malloc() 대신 물리적 메모리를 사용하는 경우. 내가 뭔가 잘못하고 있는거야? 이 경우 Visual C++에서 실제 메모리를 얻는 올바른 방법이 있습니까? VM 시스템이 최신 운영 시스템의 응용 프로그램 메모리를 제공하는 방식이기 때문에

+0

malloc을 사용하여 "실제 메모리"를 얻는 방법을 결정하는 방법은 무엇입니까? – Mat

+0

같은 방법으로 나는 그것을 얻지 못하겠다고 결정하고있다. :) 윈도우 자원 관리자를 통해 :)하지만 나는이 정보가 틀릴 수있는 다음 게시물에서 배웠다. – abbec

답변

2

http://en.wikipedia.org/wiki/Virtual_memory

당신은 또한 가상 메모리 될 것입니다 할당 모든 물리적 메모리를 참조하십시오. 물리적으로 메모리가 사용되지 않았기 때문에 일부 할당이 표시되지 않는 이유는 OS가 실제 메모리를 찾을 필요가 없기 때문이며 메모리가 처음 사용되는 경우/때입니다.

OS가 다른 응용 프로그램을 필요로하는 경우 가상 메모리의 백업 실제 메모리가 나중에 "사라질"수 있습니다. 이를 "스와핑"또는 "페이징"이라고도합니다.

+0

아 좋아! 내가 참조. 그래서 내가하고있는 일은 메모리를 미리 할당하는 것입니다. – abbec

+0

그것이 나 였다면 malloc을 사용할 것입니다. 단지 배열에 512MB를 요구하는 것이 많기 때문에 시스템이 프로그램을 종료하는 것 이외의 다른 할당 실패를보고 할 방법이 없습니다. 반면 malloc을 사용하면 큰 선행 할당이 실패했음을 감지 할 수 있습니다 (malloc이 NULL을 반환 함). –

+0

Okok ... 저는 제이슨 그레고리 (Gason Jason Gregory)의 게임 엔진 아키텍처 (Game Engine Architecture)를 참고 자료로 사용하고 있습니다. 여기서 바이트 배열은 실행 파일 BBS 세그먼트에서 효과적으로 할당됩니다. 그러나 나는 당신과 동의합니다, 그것은 오류를 발견하기가 어려울 것입니다 ... – abbec