스택과 힙의 배열 할당 및 값 유형
코드 조각에서:
int[] myIntegers; myIntegers = new int[100];
new 키워드를 사용하여 myIntegers 배열을 생성하면 배열 자체는 다음에서 제안한 대로 힙에 할당됩니다. CLR. 그러나 값 유형인 배열 내의 정수 요소는 boxing되지 않습니다.
스택 및 지역 변수
값 유형 및 값 유형을 포함한 함수의 모든 지역 변수 참조 유형은 스택에 할당됩니다. 둘 사이의 차이점은 이러한 변수에 저장되는 내용에 있습니다.
RefType 및 ValTypes
다음 유형을 고려하세요.
class RefType { public int I; public string S; public long L; } struct ValType { public int I; public string S; public long L; }
각 유형의 값에는 16바이트의 메모리가 필요합니다. I의 경우 4바이트, S 참조의 경우 4바이트(또는 실제 참조의 경우 4바이트) ValType의 경우 S 문자열), L의 경우 8바이트입니다.
RefType, ValType 및 유형의 로컬 변수가 있는 경우 int[]인 경우 다음과 같이 스택에 할당됩니다.
Stack: 0-3 bytes: RefType variable 4-7 bytes: ValType variable 8-11 bytes: int[] variable
메모리 레이아웃
이러한 변수에 값을 할당하는 경우:
refType = new RefType(); refType.I = 100; refType.S = "refType.S"; refType.L = 0x0123456789ABCDEF; valType = new ValType(); valType.I = 200; valType.S = "valType.S"; valType.L = 0x0011223344556677; intArray = new int[4]; intArray[0] = 300; intArray[1] = 301; intArray[2] = 302; intArray[3] = 303;
값은 다음과 같이 배포됩니다. 방식:
Stack: 0-3 bytes: Heap address of `refType` 4-7 bytes: Value of `valType.I` 8-11 bytes: Heap address of `valType.S` 12-15 bytes: Low 32-bits of `valType.L` 16-19 bytes: High 32-bits of `valType.L` 20-23 bytes: Heap address of `intArray`
힙:
refType의 힙 주소:
intArray의 힙에서 주소:
**Passing Arrays**
위 내용은 C#의 스택과 힙에 배열과 값 형식은 어떻게 할당되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!