다음을 통해 공유


64비트 응용 프로그램

업데이트: 2007년 11월

응용 프로그램을 컴파일하고 이 응용 프로그램이 64비트 운영 체제에서 네이티브 응용 프로그램으로 실행되거나 WOW64에서 실행되도록 지정할 수 있습니다. WOW64는 Windows 64비트 운영 체제에서 32비트 응용 프로그램을 실행할 수 있도록 운영 체제가 호환성을 제공하는 환경입니다.

설명

1.0 및 1.1 릴리스의 .NET Framework를 사용하여 빌드한 응용 프로그램은 모두 32비트 응용 프로그램으로 취급되며 64비트 운영 체제의 경우 항상 32비트 CLR(공용 언어 런타임)의 WOW64에서 실행됩니다. 또한 .NET Framework 버전 2.0을 사용하여 빌드한 32비트용 응용 프로그램도 64비트 플랫폼의 경우 WOW64에서 실행됩니다.

Visual Studio는 x86 컴퓨터에는 32비트 버전 2.0 CLR을 설치하고 64비트 Windows 컴퓨터에는 32비트 및 적합한 64비트 버전 2.0 CLR을 모두 설치합니다. Visual Studio 2008은 32비트 응용 프로그램이므로 64비트 Windows 운영 체제에 이를 설치하는 경우 WOW64에서 실행됩니다.

참고:

Itanium 프로세서 제품군에 대한 WOW64 하위 시스템과 x86 에뮬레이션의 디자인이 서로 다르므로 응용 프로그램은 한 프로세서에서만 실행하도록 제한됩니다. 단일 프로세서 실행 및 x86 에뮬레이션의 경우 Itanium 기반 시스템에서 실행되는 32비트 .NET Framework 응용 프로그램의 성능과 확장성이 저하됩니다. .NET Framework 버전 1.1을 사용하는 응용 프로그램은 로드가 많은 ASP.NET 응용 프로그램 같이 높은 성능과 확장성을 필요로 하는 응용 프로그램보다 대화형 클라이언트 응용 프로그램에 사용하는 것이 좋습니다. 성능과 확장성을 향상시키려면 Itanium 기반 시스템에 대한 네이티브 64비트 지원 기능이 포함된 .NET Framework 버전 2.0을 사용하는 것이 좋습니다.

32비트 Windows 운영 체제의 경우와 마찬가지로 64비트 Windows 운영 체제에서 64비트의 관리되는 응용 프로그램을 실행하는 동안 만들 수 있는 개체의 크기는 2GB로 제한됩니다.

대부분의 경우 어셈블리는 32비트 또는 64비트 CLR에서 동일하게 실행됩니다. 64비트 CLR에서 실행할 때 프로그램이 다르게 동작하는 몇 가지 이유로는 다음과 같은 것이 있습니다.

  • 포인터 형식처럼 플랫폼에 따라 크기가 달라지는 멤버를 포함하는 구조체

  • 상수 크기를 포함하는 포인터 산술

  • IntPtr 대신 Int32를 핸들로 사용하는 잘못된 플랫폼 호출 또는 COM 선언

  • IntPtr를 Int32로 캐스팅

64비트 CLR에서 실행할 32비트 응용 프로그램을 이식하는 데 대한 자세한 내용은 https://msdn.microsoft.com/library/?url=/library/en-us/dndotnet/html/64migrate.asp를 참조하십시오.

64비트 프로그래밍 기본 정보

64비트 프로그래밍 문제 대한 일반적인 내용은 다음 문서를 참조하십시오.

Visual Studio 개발 환경에서 64비트 응용 프로그램을 만드는 데 지원되는 기능에 대한 자세한 내용은 Visual Studio 개발 환경 64비트 지원을 참조하십시오.

64비트 응용 프로그램 작성을 위한 컴파일러 지원

32비트 또는 64비트 컴퓨터에서 .NET Framework 2.0을 사용하여 빌드한 응용 프로그램은 기본적으로 64비트 컴퓨터에서 WOW64 대신 네이티브 응용 프로그램으로 실행됩니다. 다음 표에는 Visual Studio 컴파일러를 사용하여 네이티브 또는 WOW64로 실행하거나 두 가지 방식으로 모두 실행할 수 있는 64비트 응용 프로그램을 만드는 방법에 대해 설명하는 항목이 나와 있습니다.

컴파일러

컴파일러 옵션

Visual Basic

/platform(Visual Basic)

Visual C#

/platform(출력 플랫폼 지정) (C# 컴파일러 옵션)

Visual C++

/clr:safe를 사용하면 플랫폼을 인식하지 않는 MSIL 응용 프로그램을 만들 수 있습니다. 자세한 내용은 /clr(공용 언어 런타임 컴파일)를 참조하십시오.

Visual C++에는 각 64비트 운영 체제를 대상으로 하는 개별 컴파일러가 함께 제공됩니다. Visual C++를 사용하여 64비트 Windows 운영 체제에서 실행되는 네이티브 응용 프로그램을 만드는 데 대한 자세한 내용은 Visual C++를 사용한 64비트 프로그래밍을 참조하십시오.

JScript

/platform(JScript)

.exe 또는 .dll 상태 확인

명령줄에서 corflags.exe를 사용하면 .exe 또는 .dll이 특정 플랫폼에서만 실행되는지 WOW64에서만 실행되는지 확인할 수 있습니다. corflags.exe를 사용하여 .exe 또는 .dll의 플랫폼 상태를 변경할 수도 있습니다. 자세한 내용은 CorFlags 변환 도구(CorFlags.exe)를 참조하십시오. Visual Studio 어셈블리의 CLR 헤더 또는 COM+ 런타임 헤더에서 주 런타임 버전 번호는 2로 설정되어 있고 부 런타임 버전 번호는 5로 설정되어 있습니다. Visual Studio 2003 어셈블리의 경우 이 번호는 각각 2와 0입니다. 부 런타임 버전이 0으로 설정되어 있는 응용 프로그램은 모두 레거시 응용 프로그램으로 취급되고 64비트 컴퓨터의 경우 항상 WOW64에서 실행됩니다.

GetPEKind를 사용하면 .exe 또는 .dll을 프로그래밍 방식으로 쿼리하여 해당 파일이 특정 플랫폼에서만 실행되는지 WOW64에서만 실행되는지 확인할 수 있습니다.

참고 항목

기타 리소스

Windows 기반 응용 프로그램, 구성 요소 및 서비스