힙 및 스택 할당: 배열 및 값 유형 분석
제시된 코드 조각에서:
int[] myIntegers; myIntegers = new int[100];
myIntegers 배열이 생성됩니다. 힙. 일반적인 믿음과는 달리, 배열 내에 저장된 실제 정수 값은 박싱 처리되지 않습니다.
스택 및 힙 할당 명확화
값 유형이 배열에 할당된다는 일반적인 오해 힙의 스택 및 참조 유형이 완전히 정확하지는 않습니다. 유형에 관계없이 모든 지역 변수와 매개변수는 스택에 할당됩니다. 주요 차이점은 다음 변수에 저장되는 내용에 있습니다.
값 및 참조 유형에 대한 메모리 할당
값 및 참조 유형 모두 특정 양의 메모리를 차지하며, 제공된 예제 유형의 경우 일반적으로 16바이트입니다. . 이 메모리 내:
예: 스택 및 힙 할당
다음 지역 변수를 고려하세요.
RefType refType; ValType valType; int[] intArray;
처음에는 해당 참조만 스택에 상주하며 20바이트를 차지합니다.
0 ┌───────────────────┐ │ refType │ 4 ├───────────────────┤ │ valType │ │ │ │ │ │ │ 20 ├───────────────────┤ │ intArray │ 24 └───────────────────┘
할당 시 값을 다음 변수에 추가합니다.
// Assign values to refType // ... // Assign values to valType // ... intArray = new int[4]; intArray[0] = 300; // ... intArray[3] = 303;
스택 표현은 유사:
0 ┌───────────────────┐ │ 0x4A963B68 │ -- heap address of `refType` 4 ├───────────────────┤ │ 200 │ -- value of `valType.I` │ 0x4A984C10 │ -- heap address of `valType.S` │ 0x44556677 │ -- low 32-bits of `valType.L` │ 0x00112233 │ -- high 32-bits of `valType.L` 20 ├───────────────────┤ │ 0x4AA4C288 │ -- heap address of `intArray` 24 └───────────────────┘
배열과 값 및 참조 유형은 모두 앞에서 설명한 대로 메모리 레이아웃을 사용하여 힙의 특정 섹션을 차지합니다.
요약하면 배열 myIntegers은 힙에 할당되지만 그 안에 저장된 개별 정수 값은 박스로 표시되지 않습니다. 추가 객체로 래핑할 필요 없이 힙의 할당된 메모리 내에 직접 저장됩니다.
위 내용은 힙 대 스택 할당: 배열과 값 유형은 메모리의 어디에 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!