2012-04-15 2 views
1

IntPtr.Size은 64 비트 또는 32 비트를 확인할 수 있음을 알고 있습니다.다른 환경에서 32 비트 코드를 확인 하시겠습니까?

또는

  • .NET 컴파일 된 버전 (내가로 컴파일 할 수있는 운영 체제 플랫폼에 대한

    입니다 IntPtr.Size : (8 || 4 바이트)

    질문 32 또는 64)

이 표를 확인하고 수정할 수 있습니까?

compiled to | running OS | IntPtr.Size 
______________________________________ 
     64    32  wont run 
     64    64   8 
     32    32   4 
     32    64   4 

답변

2

표는 한 당신의 열 "을 실행하면"운영 체제가 아닌 CPU의 비트 수의 비트 수를 의미로, 맞습니다. 32, 64 및 anycpu를 :

compiled to | running on  | IntPtr.Size 
___________________________________________ 
     64  | 32   | won't run 
     64  | 64   | 8 
     32  | 32   | 4 
     32  | 64   | 4 
     AnyCPU | 32   | 4 
     AnyCPU | 64   | 8 
+3

.Net 4.5에는 새로운 옵션이 있습니다. [모든 CPU 32 비트 기본 설정] (http://blogs.microsoft.co.il/blogs/sasha/archive/2012/04/04/what-anycpu-really- 수단 - 넷 - 4-5 - 및 - 비주얼 스튜디오 - 11.aspx). – svick

+0

@ Polynomial 답장 죄송합니다. 나는 그것이 내 테이블이라고 생각했다. 되돌리기 ... –

+0

질문 : 64 비트 프로세스입니다.나는 또한 32 비트로 컴파일 된 DLL을 가지고있다. 이 dll에는 매개 변수 -int로 가져 오는 Method가 있습니다. dll은 32 비트로 컴파일 되었기 때문에 int의 크기는 4 바이트입니다. 하지만 내 64 비트 프로세스가 자체 int 함께이 함수를 호출하는 경우 - method8 바이트 int 보낼 것이다 ... 그래서 무슨 일이 일어날 것인가? –

0

그것은 Opertaing 시스템 platofrm에 따라 달라지며 하지 대상 편집 유형

실제로 세 가지 옵션이 있음을 알아 두셔야합니다.

+0

@Polynomial이 잘못 되었습니까? –

+0

대상 편집 유형이 차이를 만듭니다. 32 비트로 컴파일하고 64 비트 OS에서 실행하면 64 비트 코드를 얻을 수 없습니다. – Polynomial

+0

@RoyiNamir : 그것은 나에게 똑같은 말을하는 것 같습니다. 그래서 32/64 비트는 OS에 관한 것이지만 프로세서가 아닙니다. 그렇지 않습니까? – Tigran

3

I는 다음과 같이 테이블을 써서 :

 target |  OS  | IntPtr.Size 
______________________________________ 
     x64   32  wont run 
     x64   64   8 
    AnyCPU   32   4 
    AnyCPU   64   8 
     x86   32   4 
     x86   64   4 

을 항상 anycpu를 결코 64을 대상으로 지정할 강한 힌트와 함께. 32 비트 시스템 코드에서만 사용 가능한 비 관리 코드 (일반적으로 COM 서버)를 사용해야하는 경우 x86을 대상으로하십시오.

+0

'running on'은 OS가 아닌 CPU에 관한 것입니다 ... 맞습니까? –

+0

명시 적으로 x86을 설정하는 다른 사용 사례가 있습니다 (예 : 외부 공급 업체가 x86으로 컴파일 한 .NET 라이브러리 처리). 필자는 사람들이 32 비트 컴퓨터에서 개발하고, AnyCPU로 목표를두고, 32 비트 라이브러리가로드되지 않기 때문에 64 비트 고객 시스템에서 코드가 손상되는 것을 목격했습니다. – Polynomial

+0

글쎄, 고칠 수있어, 그것을 변경 corflags.exe를 실행합니다. –

1

올바른 순서로 가져와야합니다. 코드를 IL로 컴파일하면 32, 64 또는 임의의 CPU를 선택할 수 있습니다. IL이 JIT를 네이티브로 컴파일하면 PE 헤더에 있음을 알 수 있습니다. 비트 수를 강요했다면 64 비트를 강요하고 32 비트 OS를 사용하는 경우를 제외하고는 JIT를 사용하게됩니다.

그래서 sizeof는 IL이 컴파일 된 원시 코드의 비트 수를 알려줍니다. 당신은 그것에 의존 할 수

당신에게

(64 비트 칩에 32 비트 OS) 프로세서의 비트 수를 이야기하고 그것에서 당신에게 OS (32 개 비트 프로세스의 비트 수를 말에 당신이 의존 할 수 없다 64 비트 OS)

다시 8로 오면 64 비트 OS를 사용해야하므로 다른 방법은 없기 때문에 64 비트 칩에 있어야합니다. 어쨌든 128 비트 칩과 OS가 될 때까지 ...

4가 돌아 오면 OS 나 칩의 비트를 발견하기 위해 다른 검사를해야합니다.

관련 문제