64 비트 운영 체제에서 32 비트 프로세스가 액세스 할 수있는 메모리는 얼마나됩니까?


86

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


답변:


92

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

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


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

1
무슨 말이야? 직접 빌드하는 경우 / LARGEADDRESSAWARE 플래그를 사용하여 4GB로 작동하도록 할 수 있습니다. 그렇지 않은 경우 개발자의 자비입니다.
SilverbackNet 2013

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

1
이것은 since many application depends on the top bit of pointers to be zero프로세스의 주소 공간을 순회하는 동안 주소 지정 체계의 32 번째 비트가 고려되거나 사용되지 않음을 의미합니다.
RBT

21

4GB에서 / LARGEADDRESSAWARE로 링크하는 경우 시스템에서 사용중인 것을 뺀 값입니다.

물론 해당 플래그를 설정하면 포인터 산술에 더욱주의해야합니다.


-1 : 시스템 자체에 대한 64 개 비트 주소를 사용합니다, 그래서 뭔가 뺄 필요가 없다
토마스 웰러

@ThomasW., 적어도 Windows에서는 사실이 아닙니다. WOW64에는 64 비트 시스템 호출을 위해 32 비트 썽크가 필요합니다. msdn.microsoft.com/en-us/library/windows/desktop/…
MSN

1
605kB의 DLL을 의미합니까? 죄송합니다. 질문이 GB 메모리에 관한 것이기 때문에 인식하지 못했습니다.
Thomas Weller 2014 년

7
@ThomasW., 이것이 제가 "시스템에서 사용중인 것을 빼고"라고 말한 이유입니다.
MSN

이 하나에 FYI 링크가 죽은
jjxtra

14

32 비트 응용 프로그램이 많으면 wow64 하위 시스템이 4G 이상의 메모리 어디에서나 매핑 할 수 있으므로 충분한 메모리가있는 64 비트 창에서 더 많은 32 비트 응용 프로그램을 실행할 수 있다는 사실을 아무도 접하지 않는 것 같습니다. 기본 32 비트 시스템보다.


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

8

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


4
32 비트가 4GB의 공간을 처리한다는 사실을 분명히했다면 유용했을 것입니다.
엔지니어

4

64 비트 OS에서 단일 32 비트 프로세스는 2Gb로 제한됩니다. 그러나 IMAGE_FILE_LARGE_ADDRESS_AWARE비트 세트 가있는 EXE 파일로 컴파일 된 경우 2Gb가 아닌 4GB로 제한됩니다. https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx 참조

특수 부팅 플래그, 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 비트 서버 운영 체제는 최대 64GB에 액세스 할 수 있습니다.(Windows Server 2008 Enterprise 및 Datacenter 에디션) – 인텔이 펜티엄 프로에서 처음 소개하고 나중에 AMD가 애슬론 프로세서에서 처음 소개 한 PAE (물리적 주소 확장)를 통해 세 가지 수준의 페이지 테이블 계층을 정의합니다. 32 비트가 아닌 64 비트의 테이블 항목을 사용하여 이러한 CPU가 4 기가 바이트보다 큰 물리적 주소 공간에 직접 액세스 할 수 있습니다. 따라서 이론적으로 32 비트 OS는 이론적으로 2 ^ 64 바이트 또는 17,179,869,184 기가 바이트에 액세스 할 수 있지만 세그먼트는 4GB로 제한됩니다. 그러나 마케팅상의 이유로 Microsoft는 서버가 아닌 운영 체제에서 액세스 가능한 최대 메모리를 4GB, 심지어는 3GB로 제한했습니다. 따라서 단일 프로세스는 32 비트 OS에서 4GB 이상에 액세스 할 수 있으며 Microsoft SQL 서버가 그 예입니다.

64 비트 Windows에서 32 비트 프로세스는 공유 커널의 가상 주소 공간 ( 시스템 공간 이라고도 함)을 사용하는 데있어 64 비트 프로세스와 비교할 때 단점이 없습니다. ) . 64 비트 Windows에서 모든 프로세스 (64 비트 또는 32 비트)는 동일한 64 비트 시스템 공간을 공유합니다.

시스템 공간이 모든 프로세스 에서 공유 된다는 사실을 감안할 때 32 비트 Windows 에서 많은 양의 핸들 (예 : 스레드, 세마포, 파일 등)을 생성하는 프로세스는 커널 개체에 의해 시스템 공간을 소비 하고 메모리가 부족할 수도 있습니다. 총 사용 가능한 메모리가 많은 경우. 반대로 64 비트 Windows 에서는 커널 공간이 64 비트이며 4GB로 제한되지 않습니다. 32 비트 응용 프로그램에서 만든 모든 시스템 호출은 사용자 모드에서 기본 64 비트 호출로 변환됩니다 .


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

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

@PeterCordes, 귀하의 발언에 감사드립니다. 여러 32 비트 프로세스가 PAE를 사용하는 32 비트 OS에서도 동일한 컴퓨터에서 각각 4GB를 사용할 수 있고 64 비트 프로세스에서 32 비트 프로세스를 사용할 수 있음을 강조하기 위해 답변을 업데이트했습니다. 비트 OS는 32 비트 OS에서 문제였던 2GB 시스템 공간 제한을 겪지 않습니다.
Maxim Masiutin

-1

Win64에서 32 비트 프로세스를 실행할 때 동일한 기본 제한이 있습니다. 앱은 32에서 실행되지만 Win32처럼 보이도록 최선을 다하는 하위 시스템이며 여기에는 프로세스에 대한 메모리 제한이 포함됩니다 (더 낮은 2GB, OS의 경우 상위 2GB).


-11

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

사람들이 3GB라고 생각하는 이유는 실제로 4GB의 시스템 램이있을 때 OS가 3GB를 무료로 표시하기 때문입니다.

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

4Gig 아니 3 아니 2 아니?


2
틀 렸습니다. 표준 x86 시스템 (메모리 확장 없음)의 경우 커널은 전체 4GiB의 메모리 공간에 액세스 할 수 있습니다 (컴퓨터에 페이징으로 인해 1GiB의 램만있는 경우에도). 커널은 자체 사용을 위해 상위 2GiB를 예약합니다 (일부 커널은 대신 1GiB 또는 3GiB 예약). 각 프로세스의 가상 메모리에는 커널의 예약 된 메모리도 매핑되어 있으므로 프로세스는 2GiB의 메모리를 사용할 수 없습니다.
Alex Jorgenson

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

1
이것은 올바르지 않습니다. Microsoft는 Windows NT로 가상 32 비트 주소 공간 을 분할하기로 결정했습니다 (설계 선택). 2GB는 OS 매핑 (드라이버 / API / 시스템 호출 등) 용으로 예약되고 나머지 2GB는 앱용으로 예약되었습니다. / 3GB 부팅 스위치는이 동작을 변경합니다 (OS 매핑의 경우 1GB, 앱 코드의 경우 3GB). 나는 독자를위한 연습으로 오래된 Windows NT 3.x 가상 메모리 아키텍처 문서를 찾는 것을 떠난다. :-)
ripvlan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.