해결된 질문
작성
·
241
답변 3
2
아하 질문을 잘못 이해했네요.
패킷 데이터를 먼저 채우고 -> 크기를 계산한 다음 -> 버퍼를 딱 그만큼 할당
위 흐름을 말씀하시는거군요.
다시 답변을 드리자면, 물론 그것도 가능합니다.
실제로 Part7에서 ProtoBuff로 이식할 때는 그런 방식으로 수정될 예정입니다.
다만 C++에서는 패킷 데이터를 채운 다음에 버퍼를 만드는게 아니라,
바로 버퍼에 데이터를 복사하면서 패킷을 만드는 방식이 있는데
ProtoBuff와 쌍을 이루는 FlatBuffer가 그런 방식으로 되어 있습니다.
(그러면 중간 복사 과정을 한 번 덜어낼 수 있어서 성능에 장점이 있습니다.)
1
좋은 시도이지만, 각 패킷마다 count를 미리 계산할 수 없다는 함정이 있습니다.
가령 패킷에 길드이름이나 유저이름을(string) 받는다면,
해당 문자열의 사이즈가 얼마가 될지 모르니 무조건 최대 사이즈로 잡을 수밖에 없겠죠.
마찬가지로 몬스터 리스트라거나 가변 데이터를 넣을 일이 빈번하기 때문에
동일한 패킷이라 하더라도 상황에 따라 크기가 바뀔 수 있습니다.
0
답변 감사합니다!
아래와 같은 경우처럼 가변적인 경우에도 count값을 구할 수 있지 않나요?
패킷의 Write함수를 위와 같이 사용하면 가변적인 string 크기에도 맞추어서 버퍼 할당이 가능하지 않나요?