inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

스택과 힙

stack 에 있는 본체를 그 다음 함수가 ref로 받을 때

265

한종훈

작성한 질문수 22

0

int a; // stack 에 a 라는 이름의 int라는 크기의 데이터 타입을 생성

a=1; // a 에 데이터 1을 저장

f(ref a); // 함수 f 에 a의 참조값을 넘겨주기

만약 이것이 맞다면, a의 참조값은 언제, 어디에 (stack?)

생성되었나요? 

int a; // a 선언

f(out a); // a의 데이터를 함수 f 안에서 변경하고 그 참조값을 반환???

의 데이터 변경은 어떻게 이루어 지는 것 인가요?

(stack과 heap에서)

마지막으로 어떠한 변수를 heap에 저장할 때 필수적으로 stack에서 참조값을 저장하게 되는 것 인가요? 

C#

답변 3

0

한종훈

감사합니다. 

정리하자면 거의 모든 데이터는 (gc에 의해 회수되는 데이터 빼고) 자신의 주소를 가지고 있고 (생성과 동시에 ) 주소는 상황에 따라서 stack에 저장될 수도, heap에 저장될 수도 있다는 것 이군요.

0

Rookiss

그러고보니 마지막 질문이 하나 더 있었군요.
[마지막으로 어떠한 변수를 heap에 저장할 때 필수적으로 stack에서 참조값을 저장하게 되는 것 인가요? ]

이건 꼭 그렇진 않습니다.
C#에서 할당된 메모리는 아무도 참조하고 있지 않으면 (존재를 모르면)
GarbageCollector라는 애가 메모리를 회수하고 정리하는 작업을 합니다.
따라서 어딘가에는 참조값을 들고 있어야 하지만, 꼭 그것이 스택이라는 보장은 없습니다.
예를 들어 

class A
{
}
class B
{  
  A a = new A();
}

와 같은 상태에서 B를 new B()로 할당하면 B는 힙 영역에 할당되는데,
B 생성 과정에서 a = new A()를 하게 됩니다.
이 때는 스택이 아닌 B 객체의 메모리 (=힙)에 저장되어 있겠죠.

0

Rookiss

안녕하세요,
참조값이란 어마어마하게 신비로운 것은 아니고 그냥 8바이트(long) 정수입니다.
그런데 [그 8바이트 정수가 나타내는 숫자에 해당하는 주소로 가보면, 실제 데이터가 있다!] 는 의미에 불과합니다.

이해를 돕기 위해 아래 스샷을 보시면,
RoomClass의 경우 0x0002d2a6bcab60라는 주소(참조)를 들고 있고,
해당 주소를 타고 가보면 실제 RoomClass의 데이터가 있는 것을 알 수 있습니다.

결과적으로 ref a, out a를 할 때는 a라는 변수의 주소값을 8바이트 변수로 넘기는 것이고, (이 주소는 스택의 주소겠죠)
a = 1를 할 때는 마찬가지로 [ref a로 넘긴 주소값에 가서 1이라는 데이터를 저장]하는 과정을 거친다고 보시면 됩니다.
사실 이 부분이 C#에서 보면 굉장히 헷갈리는데,
C++에서 포인터를 공부하시면 조금 더 쉽게 이해가 갈 거에요.

Generic에 대한 질문 있습니다.

0

97

2

2022 버전에 커뮤니티 버전이 없는데 2026 버전으로 해도 무관?

0

203

2

다형성 캐시 문제

0

115

3

.

0

71

1

프로퍼티 강의 질문 있습니다.

0

79

1

이후 커리 질문

0

87

1

static

0

91

2

강의에는 새로운 클래스 파일을 생성하면...

0

72

1

생성자의 이름 선언

0

66

1

9:03 Divide(10 , 3) 부분 질문입니다

0

90

1

깃허브 관련 질문 있습니다.

0

240

1

비쥬얼 스튜디오 업데이트가 된건가요..? 매개변수 오류 관련 질문

0

249

1

C# 시리즈 || C++ 시리즈 자료구조 강의에 대한 질문입니다!

0

306

2

Activator 질문있습니다

0

333

1

이넘 타임 선언 질문

0

349

1

Sort 오름차순, 내림차순

0

323

1

질문 있습니다.

0

250

1

팩토리얼 문제

0

272

1

Sort함수 질문있습니다.

0

266

1

다형성 함수 질문 있습니다.

0

221

1

질문이 있습니다.

0

230

1

섹션2 연습문제 질문입니다.

0

215

1

안녕하세요~서버에 대해 질문이 있습니다.

1

284

1

텍스트 색깔이 제 편집기와 달라서 수강에 어려움이 있습니다ㅜㅜ

0

397

1