동적 유형이 관련 유형보다 많은 메모리 크기를 사용하는지 여부C에서 동적 유형의 메모리 사용 #
예를 들어 필드는 4 바이트 만 사용합니까?
dynamic foo = (int) 1488;
동적 유형이 관련 유형보다 많은 메모리 크기를 사용하는지 여부C에서 동적 유형의 메모리 사용 #
예를 들어 필드는 4 바이트 만 사용합니까?
dynamic foo = (int) 1488;
짧은 답변는 :
아니, 실제로는 32 비트 시스템에서 12 바이트 및 64 비트에서 24 바이트를 사용합니다. dynamic
유형이 dynamic
유형으로 무엇을해야하는지 이해하기 위해 더 많은 바이트를로드 컴파일러 대상으로하지만, 런타임에 저장됩니다
긴 대답. 그렇게하기 위해, 더 많은 메모리가이를 파악하는 데 사용될 것입니다. dynamic
을 공상적인 개체로 생각하십시오.
-------------------------- -4 bytes
| Object Header Word |
|------------------------| +0 bytes
| Method Table Pointer |
|------------------------| +4 bytes for Method Table Pointer
12 바이트의 합계가 가장 작은 참조 타입 이후에 할당해야 : 여기
class Mine
{
}
가 32 비트에 상기 목적을위한 오버 헤드 : 여기 는 클래스 32 비트에서 12 바이트입니다. 우리는 다음과 같이 그 클래스에 하나 개의 필드를 추가하는 경우 : 오버 헤드와 int
필드는 12 바이트에 들어갈 수 있기 때문에 여전히 12 바이트를 취할 것
class Mine
{
public int Field = 1488;
}
.
int
필드를 추가하면 16 바이트가 소요됩니다. 우리는이 같은 클래스에 하나 개 dynamic
필드를 추가하는 경우
그러나 :
class Mine
{
public dynamic Field = (int)1488;
}
이 하지는 12 바이트가 될 것입니다. 동적 필드는 object
과 같이 처리되므로 크기는 12 + 12 = 24 바이트가됩니다. 심지어는 동적 비록 필드는 부울이기 때문에
class Mine
{
public dynamic Field = (bool)false;
}
Mine
의 인스턴스는 여전히 24 바이트를 취할 것 그것은 여전히 object
처럼 취급 : 대신이 작업을 수행 할 경우 흥미로운 무엇
이다.
64 비트 시스템에서 동적 인 Mine
의 인스턴스는 64 바이트의 최소 참조 유형이 24 바이트 (24 + 24 = 48 바이트)이므로 48 바이트를 차지합니다.
object
의 크기 this 답을 볼 수 일부 개는 있습니다.
기본 변수는 여전히 'int'이므로 예 값은 4 바이트입니다.그러나 프로그램을 동적으로 사용하기 위해 추가적인 오버 헤드가 발생합니다. –
루트에서 '동적 인'은 다이내믹 타입처럼 동작하도록 멋진 Reflection을 사용하는 '객체'입니다. 실제로 나타내는 유형보다 더 많거나 적은 데이터를 차지하지 않습니다. – Abion47
귀하의 답변은 여기에 있습니다. (첫 번째 예제에주의하십시오. 동적 유형과 객체 유형 모두 System.Int32 유형을 반환합니다.) https://msdn.microsoft.com/en-us/library/dd264741.aspx – Sparrow