강의

멘토링

커뮤니티

Inflearn Community Q&A

sangin1park8507's profile image
sangin1park8507

asked

[C# and Unity MMORPG Game Development Series] Part4: Game Server

RecvBuffer

ArraySegment<byte>구조체 질문드립니다.

Written on

·

612

0

void RegisterRecv()

{

if (_disConnect == 1)

return;

_recvBuffer.OnClear();

ArraySegment<byte> segment = _recvBuffer.WriteSegment;

_recvArgs.SetBuffer(segment.Array, segment.Offset, segment.Count);

bool pandding = socket.ReceiveAsync(recvArgs);

if (pandding == false)

RecvCompleted(null, _recvArgs);

}

 

코드에서 ArraySegment<byte> segment = _recvBuffer.WriteSegment;를 하여

새로운 segment를 만드시는데 ArraySegment는 구조체입니다. 구조체는 복사가 될 뿐 원본에 영향을 주지않는 새로운 객체로 알고있습니다.

그런데 void RecvCompleted(object sender, SocketAsyncEventArgs args) 함수에서

int processLen = OnRecv(_recvBuffer.ReadSegment);

를 할 때 어떻게 원본 객체에 데이터가 들어가는지 궁굼합니다.!

새로운 segment가 생성되어 스택에 쌓일 때 해상 스택에는 원본의 주소를 가지고 있는 건가요? 그래서 실제로는 구조체이기때문에 복사는 아니고 주소 참조? 맞나요?

 

감사합니다.!

C#networkunity

Answer 1

2

Rookiss님의 프로필 이미지
Rookiss
Instructor

ArraySegment는 복사 방식이 맞지만,
안에서 들고 있는 buffer는 참조 타입이라서
원본의 주소를 갖고 있는 것이 맞습니다.
따라서 전체 데이터가 복사가 되진 않는 것이죠

sangin1park8507's profile image
sangin1park8507

asked

Ask a question