배열에 고정 된 메모리 영역이 할당되었다고 가정하면 배열의 길이가 불변이라는 것을 완전히 이해할 수 있습니다.배열은 메모리에서 어떻게 처리됩니까?
Array [10]이 있다고 가정 해 보겠습니다. 인접 메모리를 10 슬롯 할당 할 수 있습니까? 그리고 이러한 슬롯이 인접하고 사전 결정된 위치에 있기 때문에 색인 기반 조회가 빠릅니다.
하지만 크기가 불규칙한 배열에 복잡한 유형을 넣을 경우 어떻게됩니까? 배열의 실제 객체는 같은 유형일 수 있지만 보유한 데이터의 크기가 크게 다를 수 있습니다.
.Net은 어떻게 처리합니까? 나는 객체에 실제 데이터를 저장하기 위해 순차적 인 메모리를 할당하지 않는다고 생각하지만 이것에 대한 권위있는 답변을 원합니다. 예를 들어 - 개체가 특정 크기를 초과하는 경우 비 순차 메모리 만 사용합니까? 객체의 크기가 지속적으로 변경되는 경우 저장소 위치를 최적화하려고 계속 시도할까요? 내가 서브 배열과 하위 배열에 할당 MyClass의 배열 및 런타임 시작이 있으면 지금
public class MyClass
{
public MyClass[] PotentiallyHugeNestedStructure
}
:
이 클래스를 생각해 보자. 나는 거친 배열의 광대 한 수집으로 끝날 수있다.그래서 .net에서 어떻게 처리하나요?
* 배열의 실제 개체 *?!아니요, 배열에는 객체 자체가 아닌 객체 메모리 위치 (관리되는 힙에 있음)에 대한 참조가 있습니다! – user3185569
@ user3185569 그래서 순차적으로 연결된 목록 일뿐입니다. –
'배열의 실제 객체는 같은 유형일 수 있지만 보유한 데이터의 크기가 크게 다를 수 있습니다. 데이터가 다르더라도 인덱스 당 할당 된 저장 영역은 할당 된 메모리만큼 (int 4 바이트) 동일합니다 그 블록에 대해 저장된 값을 유지할 수 있습니다 – Sherlock