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

jiw720님의 프로필 이미지
jiw720

작성한 질문수

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

SendBuffer

segmeng 범위 지정시에 질문

작성

·

434

·

수정됨

0

안녕하세요, RecvBuffer 강의중에서

//읽을 수 있는 유효한 데이터의 범위 
       
        public ArraySegment<byte> ReadSegment
        {
            get { return new ArraySegment<byte>(_buffer.Array, _buffer.Offset + _readPos, DataSize);}
        }

        //사용가능한, 비어있는 범위
        public ArraySegment<byte> WriteSegment
        {
            get { return new ArraySegment<byte>(_buffer.Array, _buffer.Offset + _writePos, FreeSize); }
        }

위와 같이 segment 프로퍼티를 설정하였는데, 중간 인자로 그냥 readPos를 넣지 않고 buffer.Offset + readPos 로 계산한 이유를 모르겠습니다.

 

현재 저의 생각으로는 buffer.Offset은 결국 언제나 0이지 않나? 입니다. 코드를 보았을 때 offset을 조작하거나 건드리는 코드는 아직 현재강의(RecvBuffer)까지는 없고, 나중에라도 _readPos와 DataSize가 결국 segment범위를 바꿔주니 이 offset을 건들일 필요는 없다고 생각이 드는 상태입니다.

 

또한, 만약 offset을 변경시키는 경우가 있더라도 offset+readpos 하면 offset이 0이 아닌경우 readpos에 맞지않는곳이 시작위치가 될텐데 왜 offset을 더하는건지 이해가 되지 않습니다.

따라서 offset을 더한 이유가 궁금합니다!

 

 

 

 

 

 

 

답변 3

0

jiw720님의 프로필 이미지
jiw720
질문자

감사합니다. 근데 지금 현재까지(SendBuffer 강의)는 offset이 전부 0인경우로 라고 생각이드는데, 나중에 offset이 달라지는 경우가 나오는것인가요?

0

jiw720님의 프로필 이미지
jiw720
질문자

저는 그 offset의 역할을 _readPos가 이미 해주고있다고 느껴지는데, 어떻게 구분해야 이해를 할 수 있는것인가요?

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

image

0

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

경우에 따라 아주 큰 버퍼를 분할해서 나눠 쓰는 경우가 생길 수 있는데
그러면 Offset이 달라질 수 있습니다.

C#은 C++과 다르게 포인터를 직접 사용하지 않으니
이런식으로 base 주소 + offset으로 관리하는 것이죠.

jiw720님의 프로필 이미지
jiw720

작성한 질문수

질문하기