.NET Framework는 Int32
에 대해 64 비트 시스템에서 Int64
보다 적은 메모리를 할당합니까?64 비트 시스템에서 32 비트 변수는 64 비트 객체보다 적은 공간을 차지합니까?
답변
INT32 및 INT64는 모든 플랫폼에서 같은 공간 소모한다 (Int32 형식 의미는 x86 및 x64 모두 다른 INT32과 동일한 금액을 소비한다). 모든 플랫폼에서 Int32는 Int64와 다른 양을 사용해야합니다.
그러나 구조체이므로 Int32와 Int64는 모두 좋지 않은 예제입니다. 객체는 기본적으로 포인터이고 x64의 포인터는 x86의 두 배입니다. 따라서 x64와 x86에서 상당히 다른 공간을 사용합니다. 이것은 기능 주소, 점프 주소, vtable, 호출 명령어 등에 적용됩니다. x64 용 컴파일 애플리케이션과 x64 용 IL 애플리케이션 JIT 코드는 x86 용 애플리케이션보다 훨씬 큽니다. 이전에는 컴파일러가 더 성숙했기 때문에 x86 코드 생성이 좀더 성숙하고 최적화 된 것으로 나타 났지만 (컴파일러가 JIT 코드 생성에도 적용 되었기 때문에) 컴파일러가 따라 잡았으며 이제는 x64 최적화가 수행 중이며, x86보다 좋지 않은 경우.
아니요, 주소 공간의 최소 크기가 64 비트이므로 동일한 양의 공간을 사용합니다.
@ 루카스 : 레지스터에서 같은 공간을 사용합니다. 메모리 양이 다릅니다. –
귀하의 답변은 도움이되지만 링크하려는 페이지의 요약 또는 관련 부분을 포함하여 [더 잘 만들 수 있습니다] (http://meta.stackexchange.com/q/8259). 이렇게하면 포함 된 링크가 앞으로 고장 나더라도 답변이 훌륭하게 유지되는 데 도움이됩니다. – derobert
답을 수정하십시오. 주어진 구조체 인스턴스는 모든 플랫폼에서 동일한 메모리 공간을 사용합니다. 다른 구조체는 동일한 플랫폼에서 다른 메모리 공간을 사용합니다. 플랫폼에 따라 다른 공간을 사용하는 객체 만. –
@ estourodepilha.com : 항상 그런 것은 아닙니다. 한 가지 예는 구조체에 참조 유형 필드 또는 플랫폼 종속 필드가 들어있는 경우입니다. IntPtr - 동일한 구조체 선언은 x64에서 더 많은 메모리를 사용합니다. –