> 백엔드 개발 > C++ > C#의 스택과 힙에 배열과 값 형식은 어떻게 할당되나요?

C#의 스택과 힙에 배열과 값 형식은 어떻게 할당되나요?

Linda Hamilton
풀어 주다: 2024-12-29 09:18:11
원래의
374명이 탐색했습니다.

How are arrays and value types allocated on the stack and heap in C#?

스택과 힙의 배열 할당 및 값 유형

코드 조각에서:

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의 힙 주소:

    • 0-3바이트: refType.I의 값
    • 4-7바이트: 힙 주소 refType.S
    • 8~11바이트: refType.L의 하위 32비트
    • 12~15바이트: refType.L의 상위 32비트
  • intArray의 힙에서 주소:

    • 0-3바이트: 배열의 길이(4)
    • 4-7바이트: intArray[0]의 값(300)
    • 8 -11바이트: intArray[1]의 값(301)
    • 12-15바이트: 값 intArray[2] (302)
    • 16-19바이트: intArray[3]의 값 (303)
**Passing Arrays**
로그인 후 복사

위 내용은 C#의 스택과 힙에 배열과 값 형식은 어떻게 할당되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿