2009-02-20 6 views
8

내가 이해하는 바에 따르면, 32 비트 프로세스는/3GB 스위치가없는 32 비트 창에서만 2GB 메모리에 액세스 할 수 있으며, 그 메모리 중 일부는 악명 높은 이유로 OS에서 사용됩니다. 메모리 사용량이 여전히 많지만 메모리 부족 예외가있는 약 1.2 - 1.5GB의 RAM에 도달 할 때 응용 프로그램이 다운되면서 내 경험과 어울리는 것 같습니다.32 비트 프로세스가 64 비트 Windows OS에서 더 많은 메모리에 액세스 할 수 있습니까?

제 질문은이 32 비트 응용 프로그램을 64 비트 창으로 이동하면 현재 1.5GB가 넘는 메모리에 액세스 할 수 있습니까? 또는 앱 자체를 64 비트로 업그레이드해야합니까?

+0

32 비트 포인터가 제안하는 전체 4GB에 액세스 할 수 있습니까? 몇 가지 작업없이 4GB 이상을 처리 할 수는 없지만 32 비트 Windows에서 사용할 수있는 것 이상을 사용할 수 있는지 알고 싶습니다. – erickson

답변

12

최신 버전의 Visual Studio에는 32 비트 응용 프로그램을 "큰 주소 공간 인식"으로 만드는 새 플래그가 있습니다. 기본적으로 64 비트 버전의 Windows에로드 된 경우 4GB (32 비트 포인터의 제한)가됩니다. 32 비트 버전의 Windows에서 제공하는 2GB 또는 3GB보다 확실히 좋습니다. http://msdn.microsoft.com/en-us/library/aa366778.aspx 참조 :

이 가장 두드러진는 말한다 : 메모리 주소 공간 에

제한은 플랫폼, 운영 체제, 에 의해 여부 IMAGE_FILE_LARGE_ADDRESS_AWARE 상기 LOADED_IMAGE 구조의 값 및 4 기가 바이트에 따라 달라집니다 튜닝 (4GT)이 사용 중입니다. IMAGE_FILE_LARGE_ADDRESS_AWARE가 /LARGEADDRESSAWARE 링커 옵션을 사용하여 으로 설정되거나 해제되었습니다.

참조 : http://msdn.microsoft.com/en-us/library/wz223b1z.aspx

1

귀하의 앱은 포인터 크기 (예 : 32 비트)로 제한됩니다.

만약 당신의 어플리케이션이 더 많은 메모리를 액세스한다면 우리는 16 비트 포인터와 오프셋을 사용하여 16 비트의 메모리 공간을 사용하는 것처럼 16 비트 일 때와 같이 일종의 세그먼트 메모리 아키텍처가 필요합니다.

1

WOW64 실제 64 비트 포인터 32 비트 포인터 변환, 64 비트 윈도우에서 32 비트 윈도우 어플리케이션을 사용하는 수있다. 실제로 32 비트 주소 지정을 사용하면 4GB의 메모리에 액세스 할 수 있습니다.

+0

32 비트 코드가 실행되는 동안 32 비트 포인터가 64 비트로 변환되지 않습니다. WOW64는 64 비트 코드로 전환 할 때만 사용됩니다. –

4

예, 적절한 상황에서 Windows의 32 비트 프로세스는 일반적으로 2Gb가 아닌 4GB의 전체 메모리에 액세스 할 수 있습니다. 앱이 응용 프로그램은/LARGEADDRESSAWARE 플래그와 함께 컴파일해야 64 비트 OS

  • 에서 실행되어야합니다

    • :

      이 작동하려면

      , 다음이 필요합니다.
    • 앱은이 경우 실제로 제대로 작동하는지 테스트해야합니다. ;) (구체적으로 2GB 경계 아래의 주소를 가리키는 모든 포인터를 사용하는 코드는 분명히 작동하지 않습니다.)
  • 관련 문제