본문 바로가기

Programming/C++16

[C++] define은 작성된 순서대로 수행 될까? #define NUM 10#define FOO NUM#undef NUM#define NUM 20 1. NUM을 10으로 define 한다.2. 그리고 나서 FOO를 NUM으로 define 한다.3. NUM을 undefine 한다.4. 다시 NUM을 10으로 define 한다. 여기서 FOO는 10일까? 20일까? define 전처리기는 설정된 값을 컴파일 전에 전부 치환하는 작업을 수행하는데 순서대로 수행한다면 FOO에 대입된 NUM이 당시에는 10이었으니까 10으로 치환되서 FOO에는 10이 할당될 것으로 생각이 든다. 하지만 결과를 보면 FOO에는 20으로 할당되어 있다. Stack Overflow에 포스팅 된 글을 보면 프로그램은 절대 사용되지 않을 define에 대해서 효율적으로 변환하는 작업을 .. 2015. 9. 10.
[C++] make_pair를 이용하여 데이터 관리 key와 value를 이용하여 저장하는 것으로 일반적으로 map 만을 생각하고 있었는데,코드를 분석하던 중 make_pair 함수를 이용해서 vector에 데이터를 보관할 때 key, value로 저장 하는 것을 발견했다.여기서는 key에 해당하는 value 값을 확률 값으로 사용해서 확률 값이 큰 순서대로 배열을 정렬시키는 용도로 사용하고 있다.STL의 sort를 통해 최적화된 정렬 알고리즘을 사용하기 위해서 이런 방식을 사용한 것 같다. std::vector array; array.push_back(make_pair(1, 1.f)); std::sort( array.begin(), array.end(), sortFunc ); 2015. 7. 13.
[C++] TCP/IP 의 window size에 대비한 처리 소켓을 이용한 데이터 송수신시에 TCP/IP를 이용하는 경우 TCP/IP에는 내부적인 윈도우 크기를 가지고 있기 때문에 한번에 원하는 양의 데이터가 전송되지 않을 수 있다. 이 TCP/IP window size는 TCP/IP에서 데이터를 처리하기 위한 구간이라고 생각하면 된다. 예를들어 2048 byte 만큼의 데이터를 전송하려고 하는데 TCP/IP window size가 1024 byte라면 전송되지 않은 1024 byte 만큼의 데이터를 재전송해주어야 한다. char sendbuff[2048]; int nBytes = 2048; int nLeft, idx; // sendbuff에 2048 만큼 데이터를 채운다. // s는 연결된 스트림 소켓 nLeft = nBytes; idx = 0; while(nL.. 2015. 5. 25.
[C++] IOCP에서 패킷 처리 관련 2014년 5월 10일 IOCP의 Recv 처리 부분을 보면 WSARecv 함수를 통해 패킷 수신 대기 상태에서 패킷 수신 신호가 오면 GetQueuedCompletionStatus함수가 수행되어 패킷을 받을 수 있게된다. 이 때 GetQueuedCompletionStatus 함수의 두번째 인자로 부터 받은 패킷의 사이즈를 확인 할 수가 있는데 이 사이즈는 WSARecv 함수와 연관이 되어 있다. WSARecv함수의 두번째 인자 WSABUF를 통해 GetQueuedCompletionStatus 함수에서 수신 받을 수 있는 패킷의 한도가 결정된다. 이와 같은 방식을 활용하기 위해 조금 복잡한 처리를 거치게 된다. 물론 사이즈를 넉넉히 잡고 해당 사이즈 안에서만 패킷을 송수신한다면 편하게 개발할 수는 있지만.. 2014. 5. 10.