2008-10-29 4 views
1

.NET Compact Framework에서 메모리를 할당하는시기는 언제입니까? 가치 유형과 참조 유형간에 차이가 있다면 세부 사항을 기재하십시오. 확인을위한 문서 또는 단계가 인정됩니다..NET Compact Framework에서 메모리를 할당하는시기는 언제입니까?

특히, 메모리가 할당되는 3 개 가지 방법이 있습니다

private MyClass item; // here? 

public void MyMethod() 
{ 
    item = new MyClass(); // or here? 
} 

답변

5

...이 시나리오를 고려하십시오.

정적 :

이가 바인딩 및 컴파일 타임에 할당됩니다. 예를 들어 전역 정적 변수.

스택 동적 :

이 런타임시 바인딩 및 스택으로 푸시됩니다. 함수 호출에서 로컬 변수와 같은.

힙 동적 :

이제 힙 동적 또한 암시 적 및 명시 적으로 몇 가지 '하위 범주'를 ​​가지고,하지만 난 그 세부 사항으로 가지 않을 것이다. 만약

private MyClass item; // here? 

선언하면

는 MyClass에 대한 참조가 스택으로 푸시된다. 그것은 단지 참조 일뿐입니다. 그 시점에서 값은 null입니다.

public void MyMethod() 
{ 
    item = new MyClass(); // or here? 
} 

그것은 메모리가 명시 적으로 언급을 한 다음 '새 MyClass에()'와 항목을 호출하여 힙에 할당되는 시점이다.

실제로 MyMethod를 호출 한 후에는 2 개의 변수가 있습니다. item이라는 참조 유형과 MyClass 유형의 항목 참조가있는 힙의 이름이없는 변수.

1

이것은 내가 생각했던 것보다 훨씬 더 좋아하는 트릭 질문입니다. :)

는 이제 기본부터 시작하자 : 직접 참조 형식에 대한 메모리 *를 할당하지 않는 변수를 선언

. 입니다. 값 유형은 선언 시점에서 초기화되기 때문에 값 유형에서는 이와 동일합니다. 참조 유형의 경우 객체의 저장소는 생성자 입력 시점에 할당됩니다.

* 이것은 언제 적용됩니까? (물론 첫 줄 수 있음), 주어진 클래스의 제 사용량

  • 는 어떤 클래스 수준 정적 데이터는 초기화되고, 클래스 (아마도 메모리를 할당하는) 정적 생성자가 있으면 것 뿐만 아니라 부름을 받는다. 따라서 실제로 변수 선언에 정적 멤버의 메모리를 할당 할 수 있습니다.
  • 기술적으로 참조 유형 변수 을 선언하면이 스택에 일부 메모리를 할당합니다 (Nicholas Mancuso가 언급했듯이). 할당 된 메모리는 객체 참조를위한 스택 레벨 저장 공간입니다.(일반적으로 인정 하듯이, 참조 null, 그러나 당신이 당신의 개체를 초기화하면, 유효한 참조가 할당 된 메모리에 존재하는 것이라고 말했다.)

내가보기 엔 자세한 내용은 스택과 힙 할당에 대한이 C-Sharp Corner article 좋습니다.

+0

아주 좋은 대답은 니콜라스가 묵시적으로 남긴 몇 가지 사항을 추가합니다. 나는 투표를 할 것이지만 그는 답을 얻고있다. 감사! –

+0

그는 그렇게해야합니다. 그의 대답은 좀 더 철저했다. :) 그와 나는 거의 같은 시간에, 잠시 정도만 대답했다. :) –

0

Compact Framework Memory Management에서 MSDN Webcase를 살펴볼 것을 적극 권장합니다. 데스크탑에서의 작동 방식과 정확히 동일하지는 않습니다.이 설명에서는 GC 힙을 이해하는 데 도움이되는 많은 세부 묘사와 그래픽으로 설명합니다.

+0

링크는

+0

입니다.하지만 이벤트가 끝났으며 비디오 또는 프레젠테이션의 업로드를 찾을 수 없습니다. –

+0

그냥 등록하면 다운로드 링크가 제공됩니다. 매우 직관적이지 않습니다. – ctacke