• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

DummyClient.PlayerInfoReq.Write()의 동작 원리 중 질문이 있습니다.

21.08.11 19:40 작성 조회수 259

0

SendBufferHelper를 통해 Open만 해줬을 뿐인데

어떻게 s가 ThreadLocalStorage에 있는 SendBuffer의 _buffer 값에 접근을 할 수 있는지 궁금합니다.

다시 말해 s는 분명 구조체 타입이고,

TryWriteBytes로 s에 패킷 데이터를 밀어 넣어준 다음에

SendBufferHelper.Close를 했는데,

어떻게 s의 정보가 ThreadLocalStorage에 있는 SendBuffer의 _buffer에도 남아 있는지 궁금합니다.

디버깅을 찍어보니깐 SendBuffer.Close()가 호출이 될 때,

새롭게 생성한 ArraySegment의 인자로 들어가는 _buffer 값이 s의 값이더라구요.

패킷의 데이터를 실제로 넣은 곳은 s인데 어떻게 ThreadLocalStorage에 있는 SendBuffer의 _buffer 값에도 영향을 주는 것인지..

ArraySegment가 class 타입이면 SendBufferHelper.Open으로 생성한 ArraySegment 를 참조해서 가능하겠거니

이해가 되겠는데 struct 타입이라 도저히 이해가 되지 않아요..ㅠ

어떤 마법과도 같은 일이 있었는지 알려주시면 감사하겠습니다 :D

답변 1

답변을 작성해보세요.

1

https://www.inflearn.com/questions/69958

비슷한 질문이 있었는데 위 그림을 보시면 이해가 쉬울 것 같습니다.

차동훈님의 프로필

차동훈

질문자

2021.08.11

ArraySegment는 구조체이지만 ArraySegment 안에 있는 Array는 배열 타입이기 때문에 원본 Array, 즉 SendBuffer._buffer의 값을 참조하고 있다고 이해하면 될까요?

네 그렇습니다. 영역을 '찝어주는' 개념이죠

차동훈님의 프로필

차동훈

질문자

2021.08.11

아..! 감사합니다!! 구조체라는 함정에 빠져서 정작 Array가 배열 타입이라는 것을 생각 못했었네요!! 거듭 감사합니다!😁