CLR 배열, 힙, 스택 및 값 유형의 역학 공개
프로그래밍 영역 내에서 기본 개념은 다음과 같습니다. 배열, 힙, 스택 및 값 유형 사이. 이러한 맥락에서 배열이 힙에 할당되고 해당 배열 내의 각 요소가 참조 유형의 경우 힙에 직접 저장되거나 값 유형의 경우 배열 자체 내에 직접 저장될 수 있는 시나리오가 발생할 수 있습니다.
다음 코드 조각을 고려하십시오.
int[] myIntegers; myIntegers = new int[100];
이 예에서 코드는 100개의 요소로 구성된 myIntegers라는 정수 배열을 할당합니다. 여기서 나타나는 질문은 이 할당이 발생하는 위치입니다. 힙입니까, 아니면 스택입니까? 지역 변수는 일반적으로 스택에 저장되므로 할당이 스택에서 발생한다고 가정할 수 있습니다. 그러나 대답은 좀 더 미묘합니다.
지역 변수와 달리 배열은 스택에 저장되지 않습니다. 대신 힙에 상주합니다. 이러한 특징은 배열이 참조 유형이라는 사실에서 비롯됩니다. 즉, 배열은 데이터 자체가 아닌 실제 데이터에 대한 참조를 저장합니다. 배열을 생성하면 CLR은 힙에 메모리 블록을 할당하고 해당 메모리에 대한 참조를 스택의 배열 변수에 할당합니다.
이제 힙에 있는 정수 요소의 특성을 자세히 살펴보겠습니다. myInteger 배열. 배열이 자주 전달되는 경우 스택이 복잡해지는 것을 방지하기 위해 이러한 요소가 박스화되어 힙에 저장된다고 추측할 수 있습니다. 그러나 이 가정은 잘못입니다. 정수와 같은 값 유형은 박싱 처리되지 않고 힙에 저장됩니다. 대신 힙의 할당된 배열 내에 직접 저장됩니다.
이 개념을 더 잘 이해하려면 값 유형과 참조 유형 모두에 대한 저장 메커니즘을 이해하는 것이 중요합니다. 값 유형 또는 참조 유형을 포함하는 모든 지역 변수는 스택에 저장됩니다. 그러나 차이점은 변수에 저장되는 데이터 유형에 있습니다. 값 유형의 경우 실제 값이 변수에 직접 저장되는 반면, 참조 유형의 경우 힙의 실제 데이터를 가리키는 참조만 변수에 저장됩니다.
그래서 myIntegers의 경우 배열의 경우 정수 요소는 박스형으로 분류되어 별도로 저장되지 않고 힙의 배열 내에 직접 저장됩니다. 이 구성을 사용하면 정수와 같은 값 유형의 배열을 참조로 전달할 수 있으므로 메모리 사용량과 성능 측면에서 더 효율적입니다.
위 내용은 배열과 해당 요소는 CLR(힙 또는 스택)에서 어디에 저장됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!