Visual Studio "모든 CPU" 대상은 무엇을 의미합니까?
Visual Studio 2008의 .NET 플랫폼 빌드 옵션과 관련하여 혼동이 있습니다.
"모든 CPU" 컴파일 대상은 무엇이며 어떤 종류의 파일을 생성합니까?저는 이 "모든 CPU" 빌드의 출력 실행 파일을 조사했는데, x86 실행 파일이라는 것을 알게 되었습니다. (그들은 그런 일이 일어날 것이라고 예상하지 못했을 것입니다!)실행 파일을 x86으로 타겟팅하는 것과"모든 CPU"?
제가 주목한 또 다른 점은 관리되는 C++ 프로젝트에는 이 플랫폼이 옵션으로 제공되지 않는다는 것입니다.왜 그런 것일까요?즉, "모든 CPU" 실행 파일이 일반 32비트 실행 파일이라는 의심이 맞습니까?
AnyCPU 어셈블리는 64비트 프로세스에 로드될 때 64비트 코드로 JIT되고 32비트 프로세스에 로드될 때 32비트 코드로 JIT됩니다.
CPU를 제한하면 다음과 같이 됩니다.어셈블리에서 32비트 또는 64비트가 필요한 무언가(관리되지 않는 것일 수 있음)가 사용되고 있습니다.
저는 대부분의 중요한 것들이 언급되었다고 생각하지만, 저는 단지 한 가지만 덧붙이자고 생각했습니다.Any CPU로 컴파일하고 x64 플랫폼에서 실행하는 경우 응용 프로그램이 WoW64에서 시작되지 않았기 때문에 32비트 DLL 파일을 로드할 수 없지만 해당 DLL 파일은 여기서 실행해야 합니다.
x86으로 컴파일하면 x64 시스템이 WoW64로 응용 프로그램을 실행하고 32비트 DLL 파일을 로드할 수 있습니다.
따라서 종속성이 두 환경에서 실행될 수 있는 경우 "모든 CPU"를 선택해야 하지만 32비트 종속성이 있는 경우에는 x86을 선택해야 합니다.Microsoft의 이 기사에서는 이에 대해 다음과 같이 설명합니다.
참고로, 이 다른 Microsoft 문서는 일반적으로 x86이 더 휴대하기 쉬운 선택이라는 것에 동의합니다.
앱 패키지는 거의 모든 장치에서 실행되므로 일반적으로 x86을 선택하는 것이 가장 안전한 구성입니다.Xbox 또는 일부 IoT Core 장치와 같이 일부 장치에서는 x86 구성의 앱 패키지가 실행되지 않습니다.그러나 PC의 경우 x86 패키지가 가장 안전한 선택이며 장치 배포 범위가 가장 큽니다.Windows 10 장치의 상당 부분은 x86 버전의 Windows를 계속 실행합니다.
다음은 다양한 빌드 대상을 설명하는 간단한 개요입니다.
제 경험에 따르면 x86과 x64 플랫폼 모두에서 실행되는 프로젝트를 구축하려고 하는데 특정 x64 최적화 기능이 없다면 "x86"이라고 부르도록 빌드를 변경하겠습니다.
그 이유는 충돌하는 DLL 파일이나 x64 환경에서 WoW를 손상시키는 코드를 얻을 수 있기 때문입니다.x86을 구체적으로 지정함으로써 x64 OS는 애플리케이션을 순수한 x86 애플리케이션으로 처리하고 모든 것이 원활하게 실행되도록 합니다.
Visual Studio .NET Platform Target Descluded 기사를 확인하십시오.
기본 설정인 "모든 CPU"는 어셈블리가 현재 실행 중인 CPU에서 기본적으로 실행됨을 의미합니다.즉, 64비트 시스템에서는 64비트로 실행되고 32비트 시스템에서는 32비트로 실행됩니다.64비트 응용 프로그램에서 어셈블리를 호출하면 64비트 어셈블리로 수행됩니다.
위 링크가 손상된 것으로 보고되었으므로 다음과 유사한 설명이 포함된 다른 기사가 있습니다..NET 4.5 및 Visual Studio 11에서 CPU의 진정한 의미
"모든 CPU"는 프로그램이 시작될 때 .NET Framework가 OS 비트 수를 기준으로 프로그램을 32비트로 실행할지 64비트로 실행할지 여부를 파악한다는 것을 의미합니다.
x86과 Any CPU 사이에는 차이점이 있습니다. x64 시스템에서는 X86용으로 컴파일된 실행 파일이 32비트 실행 파일로 실행됩니다.
의심스러운 점이 있다면 Visual Studio 2008 명령줄로 이동하여 다음을 실행하십시오.
dumpbin YourProgram.exe /headers
그것은 당신의 프로그램의 쓰라림과 더 많은 것들을 알려줄 것입니다.
모든 CPU는 모든 플랫폼에서 작동한다는 것을 의미합니다.관리되는 코드가 Java와 유사하기 때문입니다.런타임에 .NET Framework에 의해 해석되는 바이트 코드로 컴파일된다고 생각합니다.
C++은 플랫폼별 컴퓨터 코드로 컴파일되므로 이 옵션이 없습니다.
AnyCPU를 사용하는 경우 의미는 다음과 같습니다.
- 프로세스가 32비트 윈도우즈 시스템에서 실행되는 경우 32비트 프로세스로 실행됩니다.CIL은 x86 시스템 코드로 컴파일됩니다.
- 프로세스가 64비트 윈도우즈 시스템에서 실행되는 경우 32비트 프로세스로 실행됩니다.CIL은 x86 시스템 코드로 컴파일됩니다.
- 프로세스가 ARM 윈도우즈 시스템에서 실행되는 경우 32비트 프로세스로 실행됩니다.CIL은 ARM 기계 코드로 컴파일됩니다.
언급URL : https://stackoverflow.com/questions/516730/what-does-the-visual-studio-any-cpu-target-mean
'IT' 카테고리의 다른 글
Postgres: "오류: 캐시된 계획은 결과 유형을 변경할 수 없습니다." (0) | 2023.05.18 |
---|---|
마이크로소프트의 목적은 무엇입니까?넷 컴파일러? (0) | 2023.05.18 |
Angular 8의 @ViewChild에 대한 새로운 정적 옵션을 어떻게 사용해야 합니까? (0) | 2023.05.18 |
VB.NET '위드' 선언문 - 포용할 것인가, 피할 것인가? (0) | 2023.05.18 |
사전을 값별로 정렬하려면 어떻게 해야 합니까? (0) | 2023.05.18 |