목록전체 글 (342)
나만의 작은 도서관
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 구조체 선언과 포인터, 그리고 Windows API 명명 규칙Winsock 라이브러리를 보다보면 아래와 같이 구조체 정의 뒤에 포인터 타입의 이름이 명명된걸 볼 수 있다.typedef struct _OVERLAPPED { ULONG_PTR Internal; ULONG_PTR InternalHigh; union { struct { DWORD Offset; DWORD OffsetHigh; } DUMMYSTRUCTNAME; PVOID Pointer; } DUMMYUNIONNAME; HANDLE hEvent;} OVERLAP..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. NetAddress보다 직관적으로 IP 주소와 port를 저장하고 사용하기 위한 클래스.union 키워드union 키워드는 여러 변수가 같은 메모리 공간을 공유하는 데이터 구조로, union 키워드를 사용하면 같은 메모리를 다양한 크기의 변수들로 표현할 수 있다.union 키워드 예제: IN_ADDRtypedef struct in_addr { union { struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { USHORT s_w1,s_w1; } S_un_w; ULONG S_addr; ..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 두 달만에 다시 시작하는 프로젝트 커밋C++에 대한 지식이 너무 부족한 나머지 두 달동안 공부하고 오늘부터 다시 프로젝트를 시작한다.ServerService의 구상클라이언트나 서버와 같이 제공하고자 하는 내용을 서비스(Service)라고 표현했을때, 오늘은 서버 서비스에 대해 구조를 짜고자 했다.샘플 코드를 토대로 서버 서비스를 구상하였으며, 결론적으로 서버 서비스에는 아래 요소들이 필요하다고 판단했다.새로운 유저를 연결해주는 Listner서버 주소를 의미하는 NetAddress소켓 모델을 의미하는 SocketModel여기서 SocketModel은 IOCP 고정으로 사용할 것이라(나중에는 아닐 수도 있겠지만) 따로 클래스..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 멀티 쓰레드 환경에서의 쓰레드 배치에 대한 고찰쓰레드를 어떻게 배치해야 효율적인가?서버 프로그램을 제작한다고 했을때, 아래 4가지 역할을 맡는 쓰레드가 있을 것이다.리스너: 새로운 유저의 연결(Connect)를 담당패킷 처리: 네트워크를 통해 온 패킷을 받아 역직렬화인게임 로직 처리: 역직렬화된 데이터를 토대로 게임 컨텐츠 코드를 실행DB: 데이터 베이스(DB)와 통신하나의 서버 프로그램에서는 쓰레드를 30개 정도 배치할 정도로 쓰레드를 많이 배치하는데, 위 4가지 역할을 맡는 쓰레드의 비율이 어떻게 되어야하는지가 중요하다. CPU 부하를 많이 주는 작업은 1) 패킷 처리와 2) 인게임 로직 처리로, 이 둘 중에서도 ..
주의사항: 해당 글은 다듬지 않은 날것 그대로인 글입니다. jobqueue를 구현하는 첫번째 방법#1: 각 job을 클래스로 정의job 인터페이스인 IJOb을 만든 다음, 해당 인터페이스를 상속받아 job을 정의한다.그리고 각 job을 IJob타입으로 업캐스팅하여 jobqueue에 저장한다.소비자 역할을 맡은 쓰레드는 jobqueue에서 job을 하나씩 빼서 처리한다.장단점코드가 굉장히 직관적이다.새로운 job이 생기면 이에 따른 job을 새롭게 정의해야한다. job의 종류가 많아지면 굉장히 코드가 길어진다. ⇒ 코드량 2~3배 증가jobqueue를 구현하는 두번째 방법#2: 각 job을 functor로 정의functor 방식으로 작업에 해당하는 함수를 저장한다.템플릿+가변 인자를 이용하면 임의의 리턴..

개요컴파일러는 컴파일 단계에서 소스 코드를 목적 코드(예: .obj, .o 파일)로 변환하여, 이후 단계인 링커 단계에서 링커가 사용할 수 있도록 한다. 이 목적 코드에는 크게 두 가지 핵심 요소가 포함되는데, 첫 번째 요소로는 실행 가능한 기계어 수준의 “명령어”, 두 번째 요소로는 링커가 코드 조각들을 연결할 때 참조하는 “심볼 테이블”이다. 이 중 심볼 테이블은 외부 또는 내부 심볼을 식별하고 연결하는 데 필요한 정보를 담고 있으며, 이를 이해하려면 먼저 심볼(symbol)이라는 개념을 정확히 파악할 필요가 있다. 따라서, 이 글에서는 심볼이 무엇인지, 그리고 어떤 종류의 심볼이 존재하는지 살펴본다. 이어서, 컴파일러가 심볼을 심볼 테이블에 추가할 때 사용하는 저장 방식 지정자(storage cla..