inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘

동적배열 질문 드립니다.

해결된 질문

187

상병

작성한 질문수 21

0

1. 동적배열 구현하는 강의를 보고 따라서 구현했는데요,  중단점을 걸어보면 capacity가 1,2,4.. 식으로 늘어나는데 C#에 이미 구현되어있는 List를 사용하여 중단점을 걸어보니 capacity가 4부터 시작해서 4,8,16..으로 늘어났는데, 이미 구현된 List는 DefaultSize가 4로 설정이 되어있는 건가요? 

2. 동적 배열에서 원소 Remove시에 총 배열의 크기(사용하던 크기 + 예약된 크기)는 원래 줄어들지 않는건가요? 예를 들어서 5개의 원소를 넣었다가 3개를 삭제하여도 capacity가 8이 유지가 되는데, 이미 구현된 List를 사용할 시에도 극단적으로 많이 넣었다가 많이 삭제하여도 늘어났던 capacity가 유지가 되는지 궁금합니다. 메모리가 낭비되는것이 아닌가요?

3. 

T[] newArray = new T[_count * 2];

                for (int i = 0; i < _data.Length; i++)

                    newArray[i] = _data[i];

                _data = newArray;

(배열 크기 늘리는 부분)

이 부분에서 마지막에, _data 가 newArray를 가르키도록 하고 있는데요,  이러면 _data가 가르키던 _data배열은 c#이라서 Heap메모리 에서 자동으로 사라지는지, 혹시 아니라면 배열의 크기를 늘릴때마다 newArray가 힙에 계속 생겨나서 안사라지는건지 궁금합니다. (이 부분은 제가 메모리 부분 이해를 잘못 한 걸수도 있습니다.)

어려워요 C#

답변 1

0

Rookiss

1.
말씀주신 테스트 케이스를 보니 그런 것 같네요.
사실 그건 동적배열 구현마다 다르기 때문에
C++ vector라거나 C# List라거나 다 다를 수 있습니다.

2.
당장은 메모리 낭비가 맞지만,
한 번 찍은 데이터 개수는 앞으로도 또
필요하다고 판단하기 때문에 ,굳이 날리지 않는 것입니다.
정말 필요하다고 판단되면 프로그래머 직접 capacity를 변경할 수도 있기 때문이죠.

3.
C#에서 참조형은 자동 관리되고,
어디서도 참조되지 않으면 GarbageCollector가 적당한 시점에 메모리 정리를 진행합니다.
따라서 위 코드에서 이전 _data가 가리키던 메모리는 언젠가 날라갑니다.
(그 시점이 당장은 아닐 수도 있고, GC 가 결정합니다)

0

상병

빠르고 친절한 답변 감사드립니다. 공부에 정말 많은 도움이 됩니다.

게임개발에서 주로 어느부분에 알고리즘들이 쓰이는지 궁금합니다

0

198

2

글꼴 바꿔도 자간이 좁아 찌그러져보이시는 분들

0

97

1

NullReferenceException 예외) 같은 실수하시는분 계실까봐 남겨요

0

81

1

parent를 Pos타입으로 만든 이유

0

81

1

콘솔창에 격자가 안나옴 미로 생성 X

0

145

1

격자 생성 안됨 무한루프

0

119

1

BFS 질문

0

149

2

격자 무한 출력

0

175

2

A* 의 PriorityQueue 관련 질문입니다

0

161

2

vscode에서 원그리기

0

186

1

환결설정 강의 원 그리기

0

128

1

15-17분

0

92

1

3:16초에 근데 이렇게 해가지고 부분에 "{}"를 만들어서 자식 node들을 생성하던데 왜 중괄호로 감싸게 만드는 건가요?

0

145

2

동적 배열 관련 질문입니다!

0

215

1

Big-o 표기법에서 시간 복잡도

0

171

1

7:40에서 언급하신 색상이 날아가는 문제 이해를 못하겠습니다

0

156

1

트리구현연습 강의 질문있어요

0

148

1

창은 뜨는데 맵이 나타나지 않아요.

0

183

1

Ctrl F5 하면 나오는 창은 어디서 설정할까요??

0

284

1

void CalcPathFromParent(Pos[,] parent)에 대해서

0

206

2

NullReferenceException예외가 발생했을때 어떻게 해야하나요?

0

233

1

[해결] 환경설정 강의에서 원이 이상하게 그려지는 문제

3

321

2

오른손 법칙에서 플레이어 점이 안 움직입니다

0

257

2

맵 만들기 오류

0

184

1