320x100

전체 글 435

유니코드

유니코드(영어: Unicode)는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이며, 유니코드 협회(Unicode Consortium)가 제정한다. 또한 이 표준에는 ISO 10646 문자 집합, 문자 인코딩, 문자 정보 데이터베이스, 문자들을 다루기 위한 알고리즘 등을 포함하고 있다. 문자 인코딩 - 위키백과, 우리 모두의 백과사전 문자 인코딩(영어: character encoding), 줄여서 인코딩은 사용자가 입력한 문자나 기호들을 컴퓨터가 이용할 수 있는 신호로 만드는 것을 말한다. 넓은 의미의 컴퓨터는 이러한 신호를 입력받고 처리 ko.wikipedia.org 유니코드 표 http://www.unicode.org/charts/PDF/UAC00.pdf SQL..

메모리 누수 추적 라이브러리

https://docs.microsoft.com/ko-kr/visualstudio/debugger/finding-memory-leaks-using-the-crt-library?view=vs-2019 CRT 라이브러리로 메모리 누수 찾기 - Visual Studio (Windows) C/C++ 디버거 및 CRT(C 런타임 라이브러리)를 통해 메모리 누수를 찾는 방법을 알아봅니다. 포함되는 기술로는 메모리 누수 보고서와 메모리 스냅샷 비교가 있습니다. docs.microsoft.com http://lab.gamecodi.com/board/view.php?id=GAMECODILAB_PDS&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=hit&desc=des..

CPU 캐시 메모리

https://aidanbae.github.io/code/devops/computer/cpucache/ CPU 캐시 이해하기 CPU 캐시 이해하기 - 아이단의 블로그 aidanbae.github.io https://smallake.kr/?p=10552 CPU Shared Cache를 잘 사용하는 방법 | 그대안의 작은 호수 함께 놀자! Linux와 Python 1. LinkedIn에 올란 글중 Function Pointer와 관련한 글을 읽다가 찾은 글입니다. shared cache 를 위한 소프트웨어 테크닉 이 글은 Software Techniques for Shared-Cache Multi-Core Systems을 요약 smallake.kr

윈도우 메모리구조와 메모리분석 기초

물리 메모리 물리 메모리라 하면 우리는 흔히 RAM만을 생각한다. 하지만 실제 4GB램을 장착하더라도 사용할 수 있는 메모리는 4GB 이하이다. 이는 시스템이 관리하는 모든 메모리란 램 하나만을 의미하는 것이 아닌 장치 메모리(Device Memory)가 존재하기 때문인데, 이로 인해 우리가 사용할 수 있는 공간은 4GB 램일 경우 [4GB-장치 메모리]가 된다. 안 그래도 부족한 4GB 메모리가 이로 인해 더욱 부족하게 되는 것이다. 그렇기에 가상 메모리라는 개념을 사용하게 되었는데, 가상 메모리라 해도 결국 이 실제 메모리에서 활동하게 되는 것이다. 하지만 가상 메모리라 해도 결국 실제 메모리에서 활동한다고 하였는데, 여러 프로세스를 실행하면 이 주소 공간이 부족하지 않을까? 이를 위해 존재하는 것이..

C 언어의 어셈블리 분석

1.어셈블리어(Assembly Language) 기초 명령 아래는 기초 명령의 리스트이다(Intel Style의 명령이라 가정한다). mov A, B : B에서 A로 값을 이동 cmp A, B : 두 값을 비교하여 결과를 Flags 레지스터에 업데이트 rep instruction : insturction을 CX 레지스터의 값 만큼 반복 수행 call X : Stack에 Return Address를 삽입하고 jump 수행 jmp X : 무조건 해당 주소로 jump je, ja X : 조건 분기 명령. Flags 레지스터의 플레그 값에 따라서 jmp 수행(보통 cmp와 같은 명령어와 함께 사용) push X: 스택에 값을 저장 pusha, pushad : 스택에 모든 레지스터 값을 저장. EAX, ECX, ..

IOCP 관련 advance

AcceptEx 예전 reactor 방식에서 사용하던 accept 함수 대신 AcceptEx 함수를 사용하자. BOOL AcceptEx(SOCKET sListenSocket, SOCKET sAcceptSocket, PVOID lpOutputBuffer, DWORD dwReceiveDataLength, DWORD dwLocalAddressLength, DWORD dwRemoteAddressLength, LPDWORD lpdwBytesReceived, LPOVERLAPPED lpOverlapped); SOCKET sListenSocket: 서버에서 사용하는 listensocket SOCKET sAcceptSocket: 클라이언트의 연결을 수용할 소켓. 미리 풀을 만들어 둔다. PVOID lpOutputBuf..

서버/IOCP 2021.09.09

page-locking

우리가 데이터 송수신에 사용하는 함수 WSASend(), WSARecv()는 파라미터로 넘겨진 버퍼가 페이징 되지 않도록 페이지 단위(윈도우에서는 4KB)의 락을 걸게 된다. 운영체제는 이러한 페이지의 최대치가 존재하는데, 이 한계를 넘길 경우 Overlapped I/O는 실패하게 된다. 그래서 우리는 흔히 ZeroByte Recv이라는 꼼수를 통해 이벤트 발생과 데이터의 수신을 분리해서 락이 걸리는 페이지를 줄이는 방법을 사용한다. WSABUF wsabuf; wsabuf.buf = nullptr; wsabuf.len = 0; ::WSARecv(socket, &wsabuf, 1, NULL, &dwFlag, (LPWSAOVERLAPPED)&over_recv, NULL); WSARecv 함수를 이렇게 호출하..

서버/IOCP 2021.09.09

90. Subsets II

https://leetcode.com/problems/subsets-ii/ Subsets II - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 중복될 수 있는 정수가 포함된 목록의 모든 하위 목록을 반환하는 문제다. 일전에 풀었던 문제와 비슷하지만, 목록의 조건이 다르다. (중복) 그렇기 때문에 선 정렬 후 이전 문제와 동일한 방법으로 풀면 되는데.. 속도는 느린것 같다 ㅎ.. class Solution { public: void solve(vector& nu..

glog

프로젝트 내 로그 라이브러리로 glog를 사용하기로 해서 빌드 관련 내용을 정리한다. 다운로드 경로 github: https://github.com/google/glog site: https://code.google.com/archive/p/google-glog/downloads glog 특징 thread-safe함 level별로 파일이 생성 상위 level 내용이 하위 level에도 write됨 glog-0.3.3 버전을 사용했고, 개발 환경에 따라 맞게 셋팅해준다. 현재 프로젝트는 멀티바이트와 x64 환경이고, 프로젝트 내 공통 정적 라이브러리가 이미 존재하므로 동일하게 정적으로 빌드해서 사용했다. (문자 집합 변경, x64 플랫폼 추가, libglog_static 빌드 사용) 처음 프로젝트를 열면 ..

320x100