inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

스택과 힙

stack과 heap

해결된 질문

324

시에라웨이브

작성한 질문수 13

0

new로 동적할당하는 클래스 객체는 heap에 생성되고 프리미티브 타입이나 struct는 스택에 생성되어서 main 함수의 클래스 변수에서 클래스 객체를 참조할때 스택에서 힙으로 참조하고, 함수의 파라미터로 넘겨줄때 ref로 넘겨준 프리미티브 타입이나 struct는 스택에서 스택을 참조하는게 맞는 건가요? 

클래스 객체내에서 클래스 변수를 가지고 있으면 힙에서 힙을 가리키는 것 같은데 맞는지 궁금합니다.

C#

답변 2

3

Rookiss

프리미티브 타입이나 struct는 스택에 생성되어서
-> 대부분 맞긴 한데 struct라도 너무 사이즈가 크거나
내부적으로 참조값이 있으면 heap에 올라갈 수도 있습니다.
굳이 언급을 안 한 이유는,
관련된 정확한 C# 스펙이 표준에 있는 것은 아니라서
사실 heap/stack 중 어디 올라갈지는 우리가 굳이 알아야할 필요는 없습니다.

main 함수의 클래스 변수에서 클래스 객체를 참조할때 스택에서 힙으로 참조하고
클래스 객체는 heap에, main 함수의 변수는 stack에 있으니 맞습니다.

함수의 파라미터로 넘겨줄때 ref로 넘겨준 프리미티브 타입이나 struct는 스택에서 스택을 참조하는게 맞는 건가요
스택에 있는 struct 객체라면, 위 상황이 맞습니다

클래스 객체내에서 클래스 변수를 가지고 있으면 힙에서 힙을 가리키는 것 같은데
맞습니다.
그리고 클래스 변수가 있으면 사실 struct도 힙에 올라가긴 합니다.

위 관련해서 struct는 value-type, class는 reference-type이 핵심이고
사실 stack / heap 여부는 C++과 다르게 크게 신경쓸 필요가 없습니다!
그래도 궁금하시면 직접 코드를 넣어서 보는 방법이 있긴 합니다.
(unsafe 버전으로 C++ 포인터처럼 C#에서 포인터 강제 사용이 가능한데, 이를 이용한 주소 출력 및 변수 위치 확인)




0

시에라웨이브

늦은 시간에 빠른 답변 감사드립니다. 로드맵 따라서 정말 많은 도움 얻고 있습니다. 감사합니다.

Generic에 대한 질문 있습니다.

0

97

2

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

0

203

2

다형성 캐시 문제

0

113

3

.

0

71

1

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

0

79

1

이후 커리 질문

0

86

1

static

0

91

2

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

0

72

1

생성자의 이름 선언

0

65

1

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

0

88

1

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

0

239

1

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

0

249

1

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

0

306

2

Activator 질문있습니다

0

333

1

이넘 타임 선언 질문

0

348

1

Sort 오름차순, 내림차순

0

323

1

질문 있습니다.

0

250

1

팩토리얼 문제

0

271

1

Sort함수 질문있습니다.

0

266

1

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

0

221

1

질문이 있습니다.

0

229

1

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

0

215

1

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

1

284

1

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

0

397

1