2009-03-12 3 views
74

Windows의 경우 정상적인 상황에서 32 비트 프로세스는 2GB RAM (또는 boot.ini 파일의 특수 스위치로 3GB)에만 액세스 할 수 있습니다. 64 비트 운영 체제에서 32 비트 프로세스를 실행할 때 사용 가능한 메모리는 얼마입니까? 이 스위치를 변경할 수있는 특수 스위치 또는 설정이 있습니까?64 비트 운영 체제에서 32 비트 프로세스 액세스가 가능한 메모리는 얼마입니까?

+0

http://msdn.microsoft.com/en-us/library/Aa366521 –

답변

74

기본적으로 2GB입니다. 응용 프로그램이/LARGEADDRESSAWARE와 연결된 큰 주소 공간을 인식하면 4GB (3GB가 아님, http://msdn.microsoft.com/en-us/library/aa366778.aspx 참조)가됩니다.

많은 응용 프로그램이 포인터의 최상위 비트에 의존하기 때문에 여전히 2GB로 제한됩니다 0이된다.

+4

누군가 프로세스가 전체 4GB에 액세스 할 수없는 이유를 설명 할 수 있습니까? – BlueTrin

+0

무엇을 의미합니까? 직접 빌드하는 경우/LARGEADDRESSAWARE 플래그를 사용하여 4GB로 작동하도록 할 수 있습니다. 그렇지 않은 경우 수행 한 개발자가 자비를 감당할 수 있습니다. – SilverbackNet

+0

포인터가 2의 보수로 위험하게 해석 될 수 있기 때문입니까? – rosstex

17

/LARGEADDRESSAWARE와 (과) 연결 한 경우 4GB에서 시스템에서 사용하지 않은 항목. Win64를 아래에서 32 비트 프로세스를 실행할 때

Of course, you should be even more careful with pointer arithmetic if you set that flag.

+0

-1 : 시스템에서 64 비트 주소를 사용하므로 –

+0

@ThomasW.을 뺄 필요가 없습니다. 사실이 아닙니다. 적어도 Windows에서. WOW64는 여전히 64 비트 시스템 호출에 32 비트 썽크가 필요합니다. http://msdn.microsoft.com/en-us/library/windows/desktop/aa384274(v=vs.85).aspx – MSN

+1

당신은 그 DLL의 605 kB를 의미합니까? 죄송합니다. GB의 메모리에 대한 질문이 많아졌습니다. –

-1

동일한 기본 한계를 가지고있다. 귀하의 응용 프로그램은 Win32처럼 보이도록 최선을 다하는 32이지만 서브 시스템에서 실행되며, 프로세스에 대한 메모리 제한이 포함됩니다 (OS 2GB, OS 2GB 이상)

7

32 비트 프로세스는 여전히 64 비트 OS에서 동일한 제약 조건으로 제한됩니다. 문제는 메모리 포인터가 32 비트 폭이므로 프로그램이 32 비트보다 큰 메모리 주소를 할당하거나 해석 할 수 없다는 것입니다.

+2

이것은 32 비트가 4GB의 공간을 처리한다는 것을 분명히했을 때 유용했을 것입니다. –

-7

한계는 2g 또는 3gb가 아니며 32 비트의 경우 4GB입니다.

사람들이 3GB라고 생각하는 이유는 실제로 시스템 RAM이 4GB인데도 OS가 3GB를 무료로 제공한다는 것입니다.

총 RAM은 4GB입니다. 따라서 32 비트 OS에서 볼 수있는 총 램의 일부로 간주되는 1GB 비디오 카드가있는 경우.

4 개가 3 개가 아니십니까?

+2

올바르지 않습니다. 표준 x86 시스템 (메모리 확장 없음)의 경우, 커널은 페이징으로 인해 1GiB의 램 만 가지고도 4GiB의 메모리 공간을 모두 사용할 수 있습니다. 커널은 자신의 용도로 상위 2GiB (일부 커널은 1GiB 또는 3GiB를 대신 보유)를 예약합니다. 각 프로세스의 가상 메모리도 커널의 예약 된 메모리를 매핑하므로 프로세스는 2GiB의 메모리를 사용할 수 없습니다. –

+3

또한 비디오 카드는 프로세스에서 사용할 수있는 메모리의 양과 아무 관련이 없습니다. ACPI 테이블, 메모리 매핑 IO 등은 실제 메모리 주소를 사용하지만 가상 메모리 덕분에 피할 수 있습니다. –

+1

올바르지 않습니다. Microsoft는 * Virtual * 32 비트 주소 공간을 Windows NT와 분리하여 2GB를 OS (드라이버/API/시스템 호출 등) 매핑 용으로, 나머지 2GB를 App 용도로 예약하도록 선택했습니다./3GB 부트 스위치는이 동작을 변경합니다 (OS 매핑의 경우 1GB, 앱 코드의 경우 3GB). 이전 Windows NT 3.x 가상 메모리 아키텍처 문서를 독자의 연습 문제로 남겨 두었습니다. – ripvlan

14

많은 다른 32 비트 응용 프로그램이있는 경우 wow64 하위 시스템이 4G 이상의 메모리에서 해당 위치를 매핑 할 수 있으므로 충분한 메모리가있는 64 비트 창에서 더 많은 것을 실행할 수 있다는 사실에 아무도 느끼지 않습니다 32 비트 응용 프로그램은 기본 32 비트 시스템보다

+7

OP가 가상 메모리에 대해 말하는 실제 RAM에 대해 이야기하고 있습니다. 32 비트 시스템에서도 페이지 파일이 충분히 크면 많은 응용 프로그램을 실행할 수 있습니다. –

2

64 비트 OS에서의 단일 32 비트 프로세스는 2Gb로 제한됩니다. 이 IMAGE_FILE_LARGE_ADDRESS_AWARE 비트 세트 EXE 파일로 컴파일 할 경우에, 그 다음 4기가바이트하지 기가 바이트의 제한이 - 두 경우 https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

를 참조 커널의 가상 주소 공간은 모든 프로세스에서 공유됩니다. 그래서 32 비트 프로세스가 매우 많아도 64 비트 운영 체제에서 사용할 수있는 많은 메모리 (예 : 16GB)에도 불구하고 메모리가 부족할 수 있습니다. 32 비트 총 프로세스 수는 커널의 가상 주소 공간 (최대 2GB)에서 빠르게 벗어날 수 있습니다.

특별 부팅 플래그, 3GB,/3GB 스위치 또는/userva에 관한 모든 것들은 모두 32 비트 운영 체제에 관한 것이며 64 비트 Windows에는 적용되지 않습니다.

자세한 내용은 https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx을 참조하십시오.

약 32 비트 운영 체제와 달리 32 비트 운영 체제의 경우 4GB의 실제 제한이 없습니다.예를 들어 Microsoft Windows Server 2008 32 비트와 같은 32 비트 서버 운영 체제는 PAE (Physical Address Extension)를 통해 64GB (Windows Server 2008 Enterprise 및 Datacenter 에디션)까지 액세스 할 수 있습니다. 펜티엄 프로의 인텔, 나중에는 Athlon 프로세서의 AMD에 의해 32 비트 대신 64 비트의 테이블 엔트리를 갖는 3 레벨의 페이지 테이블 계층 구조를 정의하여이 CPU가 4 기가 바이트보다 큰 실제 주소 공간에 직접 액세스 할 수있게합니다 이론적으로 32 비트 OS는 이론적으로 2^64 바이트 또는 17,179,869,184GB에 액세스 할 수 있지만 세그먼트는 4GB으로 제한됩니다. 그러나 마케팅상의 이유로 Microsoft는 서버가 아닌 운영 체제에서 최대 액세스 가능한 메모리를 4GB 또는 3GB까지만 제한했습니다. 따라서 하나의 프로세스가 32 비트 OS에서 4GB 이상을 액세스 할 수 있으며 Microsoft SQL 서버가 그 예입니다.

+1

이 질문은 단일 프로세스 *가 액세스 할 수있는 메모리 양에 대해 묻습니다. 이는 32 비트 가상 메모리 주소 공간으로 제한됩니다. PAE를 사용하는 32 비트 OS에서도 동일한 컴퓨터에서 4GB를 사용하여 여러 개의 32 비트 프로세스 *를 * 가질 수 있습니다. 그러나 이것은 *이 질문이 요구하는 것이 아닙니다. –

+0

@ PeterCordes - 죄송합니다. 감사합니다. - 2GB/4GB 제한에 대한 답변을 업데이트했습니다. –

관련 문제