인프런 커뮤니티 질문&답변

BBAKK님의 프로필 이미지
BBAKK

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Session #3

ArraySegment관련 질문

작성

·

247

2

6분쯤에 ArraySegment가 Struct라서 스택영역에 할당되고 BufferList에 Add할 때 복사되어 전달된다고 설명하셨는데

struct가 스택영역에 할당되려면 몇가지 조건이 있는 것으로 알고 있습니다.

예를들면 16바이트 미만이고 멤버변수로 class가 없어야한다 등등...

그런데 위의 조건과 상관없이 Rookiss님이 설명하신 내용대로 되는 이유가 궁금합니다.

답변 1

9

Rookiss님의 프로필 이미지
Rookiss
지식공유자

말씀하신대로 여러가지 고려사항이 있는 것이 맞습니다.

16바이트 미만일 때 struct를 사용하라는 것은
MS의 권장사항에 나와있긴 하지만,
실제로 int 5개로 struct를 만들어 테스트 해봐도 스택영역에 할당되기도 합니다.
(정말 확실히 알려면 unsafe 모드로 포인터 주소를 찾아서 스택을 찾아보면 알 수 있습니다)

C# 에서 Heap/Stack과 관련된 세세한 부분은
C# 스펙이 아닌 CLR의 implementation detail에 해당하고
언어 특성상 특별히 신경쓸 내용이 아니기에 언급한 적은 없지만,
마찬가지로 ArraySegment가 스택이라고 단정짓고 설명한 것도 잘못된 설명이 맞습니다.
배열 영역을 쪼개서 쓰는 것이 중점이었고
Heap/Stack은 지나가다가 나온 얘기였는데
잘못된 부분을 예리하게 짚어주셨네요.

감사합니다!

BBAKK님의 프로필 이미지
BBAKK

작성한 질문수

질문하기