2009-03-16 3 views
40

sizeof(int) 내 C# .NET 프로젝트에서 4의 반환 값을 얻었습니다. 프로젝트 유형을 x64로 설정 했으므로 왜 8 대신 8을 말합니까? 내가 관리되는 코드를 실행 중이기 때문입니까?x64의 sizeof (int)입니까?

+3

관리되지 않는 코드는 .NET과 동일한 결정을 내립니다. 보통 C++에서 sizeof (int)는 4입니다. x64를 32 비트 아키텍처의 확장으로 생각하십시오. 기본값은 여전히 ​​32이며, 64 비트 데이터 *도 처리 할 수 ​​있습니다. – jalf

+1

@jalf는 더 정확하게 말하자면 이미 64 비트 데이터를 처리 할 수있는 기능을 갖추고 있지만 x64 CPU는 기본 지원으로 인해 더 빠르게 처리합니다. –

+2

왜 이것을 닫았습니까? 기술적으로는 동일하지만, Java에 관한 다른 질문은 .NET/C#에 관한 것입니다. –

답변

36

various 64-bit data models를있다; Microsoft는 LP40 for .NET을 사용합니다. 은 길이가이고 포인터는 64 비트입니다 (기존 C 스타일 포인터는 .NET에는 없지만). 이것을 ILP64와 비교해보십시오. 도 64 비트입니다.

따라서 모든 플랫폼에서 int은 32 비트이고 long은 64 비트입니다. 기본 형식 인 System.Int32System.Int64의 이름에서 확인할 수 있습니다.

+7

답변을 완전히 수정하려면 답변을 수락 한대로 편집해야합니다. "전통적인 C 스타일 포인터가 존재하지 않지만 .NET"이라는 말을 제거하고 System.IntPtr 세부 사항은 아키텍처에 따라 다릅니다. –

+1

C#에서는 "C 스타일"포인터를 사용할 수 있습니다. 단지 안전하지 않은 상황에서 수행해야합니다."fnieto"와 마찬가지로 IntPtr은 x64의 "sizeof (IntPtr) == 4"및 x64의 "sizeof (IntPtr) == 8"플랫폼에 종속된다는 점에 유의해야합니다. – zezba9000

45

int 별칭 System.Int32은 64 비트 컴퓨터에서도 여전히 4 바이트를 필요로합니다.

24

int은 .NET 언어로 Int32을 의미합니다. 이는 32 비트 및 64 비트 아키텍처 간의 호환성을 위해 수행되었습니다.

여기 C#의 table of all the types과 .NET에 매핑되는 항목이 있습니다.

4

int은 기본 유형 Int32에 대한 컴파일러 별칭입니다. 주어진 이유는 분명합니다. int은 64 비트 플랫폼에서만 32 비트입니다.

12

int 포인터 또는 System.IntPtr을 생각할 수도 있습니다. 이것은 x64에서는 8 바이트이고 x86에서는 4 바이트입니다. 포인터의 크기는 메모리에 64 비트 주소가 있음을 보여줍니다. (System.IntPtr.Size = x 8 on x64)

int의 의미는 사용자가 x86인지 x64인지에 관계없이 여전히 4 바이트입니다. 즉, int은 항상 System.Int32에 해당합니다.

14

Int32은 x86 및 x64에서 4 바이트입니다. Int64은 8 바이트입니다. C# int 형식은 System.Int32의 별칭 일뿐입니다. 두 런타임 환경 모두에서 동일합니다. 런타임 환경에 따라 변경하는 유일한 유형은 IntPtr입니다 :

unsafe 
    { 
     var size = sizeof(IntPtr); // 4 on x86 bit machines. 8 on x64 
    } 
+4

또는 안전하지 않은 코드가 필요하지 않은 IntPtr.Size를 확인할 수 있습니다. 물론 –

+0

... 및 UIntPtr. ... 안전하지 않은 포인터 유형. –

+0

주목할 점 : UIntPtr은 CLS 규격이 아닙니다. –

2
int i; 
int size = BitConverter.GetBytes(i).Lenght; 
+3

이 질문은 3 년 전에 요청되었으며 이미 승인 된 답변이 있습니다. 아직 수락 된 답변이없는 최근 질문에 대한 답변을 제공 할 수 있는지 확인하십시오. – mcknz

+1

분명히 "Lenght"때문에 헌신적이라고 생각합니다. – Laie