inflearn logo
강의

Course

Instructor

[MMORPG Game Development with C++ and Unreal Series] Part 4: Game Server

Memory Pool #1

poolTable관련 질문드립니다!

466

G General

23 asked

0

강의 보면서 많이 배우고 있습니다!

이번에는

MemoryPool_poolTable[MAX_ALLOC_SIZE + 1];
----------------------------------------------
for (size = 32size <= 1024size += 32)
{
  MemoryPoolpool = new MemoryPool(size);
  _pools.push_back(pool);

  while (tableIndex <= size)

위 부분들에 대한 질문인데요, MAX_ALLOC_SIZE 에 while(tableIndex <= size -1) 을 해야될것 같은데 +1에 while(tableIndex <= size)여서 많이 고민해봤는데, 잘 모르겠어서 질문드립니다!

메모리 풀을 만드는 방법은 거시적으로는 이해가 되는데 위 부분에서 막히네요ㅜ

network MMORPG windows-server

Answer 3

0

G General

저처럼 강의 끝까지 PoolAllocator로 하게 되면 JobQueue파트의 채팅실습 챕터에서 allocSize 3984 로 프로그램이 죽게됩니다ㅋㅋㅋ 원인이 뭐였는지는 잘 기억 안나는데, allocSize 3984로 throw 되는거 보자마자 '터질게 터졋구나'하고 size 초기화 제대로 해줬습니다

0

Rookiss

직접 실험 대상이 되어 주셨네요 ㅎㅎ
제보 감사하고 나중에 시간될 때 살펴보도록 하겠습니다. 

0

apto

등호를 빼지 않거나 초기값을 세팅 안해준다면 테이블 index가 3872까지 등록?됩니다. 그럼 테이블의 3872~부터는 초기화 해주지 않은 상태가 되겠죠..

만약 데이터 크기가 너무 커서 MAX_ALLOC_SIZE을 넘은 데이터는 문제가 없을테고.

결국 3873~4095 크기의 데이터가 들어올 경우 문제가 생기는것 같습니다. 초기화 하지 않은 테이블을 참고해서요. 말씀하신 3984가 딱 그 사이에 들어가는 값이네요.

0

Rookiss

예제에서 _poolTable 사용법은,
할당할 메모리 크기를 size라고 하면
_poolTable[size]로 빠르게 할당될 풀을 찾기를 원하는 것인데요.
실제 할당받을 데이터 size 크기는 [1(포함)~MAX_ALLOC_SIZE(포함)] 사이고
MAX_ALLOC_SIZE도 포함되어 있기 때문에,
_poolTable[MAX_ALLOC_SIZE + 1]로 만들어준 것입니다.
물론 이 경우 _poolTable[0]은 사용할 일이 없겠죠.
이게 신경쓰이면 _poolTable[MAX_ALLOC_SIZE]로 만들고 _poolTable[size-1]로 접근한다거나,
하는 식으로 수정할 수 있겠지만 직관적이지 않다보니 그냥 배열을 +1로 해준 것입니다.

저 부분은 딱히 중요한 부분이 아니라서
어떻게 구현을 하는지는 정말 하나도 상관없습니다.

0

G General

답변 감사드립니다.

추가적으로 128이나 256단위의 반복문에서 size=1024나 size=2048로 초기화 하지 않거나 condition의 등호를 빼지 않으면, 아랫단계에서 size = 1056을 초기값으로 128단위의 반복문 진입, size = 2080을 초기값으로 256단위의 반복문 진입 이 발생해서 꼬이게 되지 않나요?

물론 어차피 테이블에서는 매핑을 제대로 해줘서 큰 문제는 없을 것 같긴 해보이지만요

1

Rookiss

네 그렇긴 한데 어차피 한 번 만들고
절대 고칠 일이 없는 코드라 동작만 잘 하게 만들면 되겠습니다.

0

G General

아 혹시  allocSize가 0일 수가 없으니까 그냥 0번을 만들어놓기만하는 건가요

Memory Pool에서 오버플로우 질문입니다.

0

55

2

포토폴리오 및 진로 관련하여 고민입니다.

0

95

1

포토폴리오 관련 고민입니다.

0

49

1

실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.

0

74

2

성능 테스트 결과

0

97

2

게임 서버 Stateful, Stateless 진로 고민

0

113

1

WaitOnAddress와 Sleep의 차이 질문

0

78

1

궁금한거 있습니다.

0

78

2

JobTimer 구동 스레드

0

103

2

TryPop() 동작 관련 질문

0

78

1

로드맵 C#서버 C++서버 방향성 질문

0

142

2

스레드 id를 출력할떄 메인스레드 id도 출력되나요?

0

70

1

생명주기를 위한 의도적 복사

0

81

2

락프리의 실무에서 사용 질문

0

137

2

32bit threadID와 16비트 상위 WriteFlag에 대해

0

98

2

mutex와 sleep 차이점

0

114

1

실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다

0

149

2

Stomp Allocator의 Release함수에 대한 질문입니다.

0

91

1

공부법 관련해서

0

179

2

MakeShared 함수 관련

0

110

1

지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.

0

140

2

운영체제관련 질문입니다

0

127

1

send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.

0

114

2

메모리 풀 질문있습니다.

0

119

1