2017-04-12 1 views
1

나는 아래의 이름으로 "직원"과 같은 속성 클래스를 언급했습니다.아래 시나리오에서 메모리 할당이 어떻게 이루어 졌습니까? 내가 그것을 뒤죽박죽으로 관리했습니다

public class Employee 
{ 
    public int EmpID { get; set; } 
    public int DeptId { get; set; } 
} 

우리 모두 "INT" 데이터 유형은 다음과 같이 스냅인처럼 힙에 저장됩니다 스택과 객체 유형에 저장 될 것이라는 점을 알고있다. 여기

enter image description here

내 질문은, 내가

Employee objEmployee = new Employee(); 

같은 직원 클래스의 객체를 만들려고하면 어떻게 메모리 할당을 완료되었습니다입니까?

어떤 문헌이나 관련 링크도 인정 될 것입니다.

+0

이유 투표를하지 않는 이유는 무엇입니까? –

답변

13

가치와 참조 유형 간의 차이를 볼 당신에게 this article by Joseph Albahari을 제시하지 아래의 스냅처럼 힙에 저장하십시오.

완전히 거짓이기 때문에, 우리가 것을하지 을 모두 알고있다.

그것에 대해 생각 :

int[] M() { return new int[] { 1 }; } 

는 스택에 1인가? 그렇다면 M이 반환 한 후에 M의 발신자가 어떻게 액세스 할 수 있습니까?

물론 그럴 수는 없습니다. 1은 int이지만 힙에 있습니다.

문제는 변수가 아니라 값을 생각하고 있다는 것입니다. 변수는 정수 또는 참조가 저장되어 있는지 여부에 관계없이 저장 영역입니다. 그 저장소는 어딘가에 있어야합니다. 저장 용량은 평생 요구 사항에 따라 다릅니다. 단기 저장 영역은 스택 또는 레지스터와 같은 단기 저장 영역 풀에서 할당 할 수 있습니다. 장기간 저장 영역은 장기 저장 영역 풀 ​​(힙)에서 할당됩니다. 은 저장할 값이 구조체인지 참조인지 여부와 관계가 없습니다.

예제에서 속성에 대한 백업 저장소는 임의로 오래 살 수 있으므로 힙에서 할당해야합니다.

값 유형 값이 스택에 있다는 신화를 단순히 멈추게 할 필요가 있습니다. 값은 으로 저장되고 저장 용량은 평생 요구 사항을 충족하기 위해 이동해야합니다..

-1

Employee은 참조 유형입니다. 그것은 힙에 배치하고 스택에는 reference 만 있습니다. 아무리이 클래스 내부에있는 어떤 분야

나는 우리 모두가 "INT"데이터 형식이 될 것입니다 스택과 객체 타입에 저장 될 것이라는 점을 알고있다

관련 문제