다음을 통해 공유


가상 주소 공간(64비트 Windows용 프로그래밍 가이드)

기본적으로 64비트 Microsoft Windows 기반 애플리케이션에는 몇 테라바이트 단위의 사용자 모드 주소 공간이 있습니다. 정확한 값은 Windows 및 Windows Server 릴리스에 대한 메모리 제한을 참조하세요. 그러나 애플리케이션은 시스템에서 2GB 미만의 애플리케이션에 대한 모든 메모리를 할당해야 한다고 지정할 수 있습니다. 이 기능은 다음 조건이 충족되는 경우 64비트 애플리케이션에 유용합니다.

  • 2GB 주소 공간으로 충분합니다.
  • 코드에는 많은 포인터 잘림 경고가 있습니다.
  • 포인터와 정수는 자유롭게 혼합됩니다.
  • 코드에는 32비트 데이터 형식을 사용하는 다형성이 있습니다.

모든 포인터는 여전히 64비트 포인터이지만 시스템에서는 모든 메모리 할당이 2GB 제한 미만으로 발생하므로 애플리케이션이 포인터를 자르면 중요한 데이터가 손실되지 않습니다. 포인터는 32비트 값으로 잘린 다음, 기호 확장 또는 0 확장으로 64비트 값으로 확장할 수 있습니다.

이 메모리 제한을 지정하려면 /LARGEADDRESSAWARE:NO 링커 옵션을 사용합니다. ARM64 이진 파일에 대해서는 /LARGEADDRESSAWARE:NO 가 무시됩니다. 그러나 이 옵션을 사용할 때 문제가 발생할 수 있습니다. 이 옵션을 사용하는 DLL을 빌드하고 이 옵션을 사용하지 않는 애플리케이션에서 DLL을 호출하는 경우 DLL은 상위 32비트에서 중요한 64비트 포인터를 잘릴 수 있습니다. 이로 인해 경고 없이 애플리케이션 오류가 발생할 수 있습니다.