Clean함수의 else부분 질문 있습니다
412
작성한 질문수 14
_readPos = 0;
_writePos = DataSize;
이렇게 하셨는데 순서가 반대 아닌가요??
readPos가 2이고 writePos가 5였을 때 DataSize는 3
그런데 readPos를 먼저 0으로 하면 DataSize는 5로 변해
writePos는 3이 아닌 5로 초기화가 될것 같습니다
else부분은 남은 데이터가 있는 경우 readPos만큼 Array의 처음 주소를 앞 당기는거니까 초기화된 writePos의 기대값으론 기존 writePos - readPos 아닌가요??
readPos = 0;
이 부분이 먼저 나온 이유가 궁급합니다!
답변 3
1
1달정도 전의 질문이지만 답변 드립니다.
public void Clean()
{
int dataSize = DataSize;
if (DataSize == 0)
{
_readPos = 0;
_writePos = 0;
}
else
{
rray.Copy(_buffer.Array, _buffer.Offset + _readPos, _buffer.Array, _buffer.Offset, dataSize);
_readPos = 0;
_writePos = dataSize;
}
}해당 구문에서 dataSize의 경우 Clean() 함수 내에서 먼저 선언해둔 지역변수 int dataSize = DataSize;의 dataSize 입니다.
따라서 이후 _readPos = 0;을 하면 DataSize의 경우 5가 되나, dataSize의 경우 이전에 설정해둔 3의 값 그대로 사용하고 있습니다. 따라서 둘의 순서는 상관 없습니다.
0
이해가 안된것 같아요
readPos를 먼저 앞으로 당겼기 때문에 DataSize의 값에 변동이 있어 writePos가 나중에 초기화 되면 예상되는 값이 안나올것 같습니다
writePos가 readPos 만큼 앞으로 당겨지려면
writePos가 먼저 초기화 되야하지 않나요??
0
안녕하세요 dpcks5959 님, 인프런 AI 인턴이에요.
제가 보기에는 코드에서 _readPos와 _writePos를 초기화하는 부분에서 순서가 조금 헷갈릴 수 있는 부분이 있습니다.
_clean 함수의 else 부분에서 _readPos를 0으로 초기화하는 것은 남은 데이터가 있는 경우, _readPos만큼 Array의 처음 주소를 앞으로 당기는 작업을 할 때 필요한 과정입니다. 따라서 _readPos는 0으로 초기화해야 합니다.
_writePos의 초기값은 DataSize로 설정된 것을 보아, 이미 데이터가 있을 경우에는 DataSize 만큼은 쓰여 있을 것으로 가정하는 것 같습니다. 그리고 남은 데이터를 앞으로 당길 때는 _readPos만큼을 앞으로 당기기 때문에 _writePos는 _readPos만큼 작아질 것입니다.
따라서, 코드에서의 초기화 순서는 맞는 순서입니다. _readPos를 먼저 0으로 초기화하는 이유는 앞으로 남은 데이터를 당기기 위해서입니다.
더 자세한 설명을 원하시면 코드의 전체 내용을 공유해주시면 감사하겠습니다. 이해에 도움이 되었는지 확인해보세요. 감사합니다!
TLS 질문드립니다.
0
36
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
41
2
Unity Span
0
67
2
XML, Dll 차이점
0
99
2
Session 질문입니다
0
74
1
Write Read 커서 키워드
0
69
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
65
2
네트워크 Send 전담 스레드 배치
0
94
2
UnhandledException 으로 서버 터지는 경우
0
82
2
컨텐츠 단, 엔진 단
0
100
1
질문 있습니다
0
73
2
C# 게임서버 3D MMORPG
0
141
2
유니티6 버전
0
94
2
receive하는 부분과 send하는 부분의 차이
0
128
2
커서의 위치의 중요성
0
99
2
C++ 전혀 모르는데 C# 서버
0
164
2
강의에 질문이 있습니다
0
83
2
멀티스레드 이해도 질문
0
90
1
500 vs 500
0
122
3
OnAcceptHandler 액션 함수
0
57
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
185
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
78
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
100
1
스핀락 질문.
0
104
2





