-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
segmeng 범위 지정시에 질문
23.03.05 13:49 작성 23.03.05 13:49 수정 조회수 345
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을 더한 이유가 궁금합니다!
답변을 작성해보세요.
0
jiw720
질문자2023.03.07
감사합니다. 근데 지금 현재까지(SendBuffer 강의)는 offset이 전부 0인경우로 라고 생각이드는데, 나중에 offset이 달라지는 경우가 나오는것인가요?
0
0
Rookiss
지식공유자2023.03.05
경우에 따라 아주 큰 버퍼를 분할해서 나눠 쓰는 경우가 생길 수 있는데
그러면 Offset이 달라질 수 있습니다.
C#은 C++과 다르게 포인터를 직접 사용하지 않으니
이런식으로 base 주소 + offset으로 관리하는 것이죠.
답변 3