분류 전체보기

· 서버
C++에서 메모리 동적할당에 사용하는 malloc 함수나 new 연산자 같은 경우, 몇가지 문제가 존재한다. 다양한 메모리 사이즈들이 할당, 해제되면서 연속적인 메모리 공간이 부족해지는 메모리 파편화 문제나, 반복되는 할당+해제에 의한 성능저하를 생각해 볼 수 있다.메모리 풀(Memory Pool)을 이용하면 이런 문제들을 어느정도 해결할 수 있다.메모리 풀은 큰 사이즈의 메모리 블록을 미리 할당하여 malloc, new 연산자와 유사한 메모리 동적 할당을 가능하게 해준다. 큰 사이즈의, 연속적인 메모리 블록을 미리 할당하기 때문에 파편화를 어느 정도 해결할 수 있고, 사용한 메모리 공간을 해제하는 것이 아닌 재사용하는 방식이기 때문에 퍼포먼스 향상을 기대할 수 있다 고려사항구현 방법은 정말 다양하다. ..
· C++
c++ STL에서 가장 많이 쓰이는 컨테이너 중 하나인 std::vector의 복사는 효율적일까?다음 코드를 실행시킨다 했을때using namespace std;class A{public: A() { cout temp1 = vector(10); vector temp2 = temp1;}temp2에 temp1을 복사 할 경우 그림과 같이 요소의 개수 N(위 예제에서는 5)번 만큼의 복사생성자가 호출된다.즉, vector의 복사생성자는 N개의 요소들을 각각 순차적으로 복사하는, O(N)의 시간복잡도를 갖게 된다. 궁금한 점은 vector는 연속된 메모리인데  비효율적으로 왜 모든 요소들을 각각 복사하는걸까? 연속된 메모리 구간을 통채로 복사해서(이를테면, memcpy와 같은) 복사하는게 아니라 각각 복사하는..
· C++
Struct구조체 Struct의 멤버 변수를 메모리에서 CPU로 읽을 때 한번에 읽을 수 있도록, 컴파일러가 레지스터의 블록, Word의 크기(64비트라면 8바이트, 32비트라면 4바이트)에 맞춰 바이트를 패딩시켜주는 최적화 작업을 수행한다. 만약 struct x{ char a; int b; char c;}struct x data;위 구조체의 메모리 크기인 sizeof(data)는 6바이트가 아닌 12바이트이다. 컴파일러가 구조체를 구성하는 멤버들을 가장 크기가 큰 멤버 자료형(여기서는 int)의 배수가 되도록 정렬했기 때문이다. 이 정렬을 위해 의미없는 바이트들을 더해 패딩해준 것이고, a와 c 뒤에 3바이트씩 패딩이 추가된다. struct x{ char a; char c; int b;}하지만 다음과 ..
· Unreal
우선 데디케이트 서버를 이용하지 않고 서버와 클라이언트가 완전히 분리된 상황에서 어떤 식으로 서버를 구성하고 컨텐츠를 구성해야 하는지 헤딩해볼 예정이다. 클라이언트는 언리얼 엔진을 이용하여 구현하고 서버는 클라이언트와 완전히 분리된 소켓 형식의 서버로 구현했다. 기획은 MMORPG의 각 컨텐츠들을 조각으로 기능을 구현해보고, 최종적으로 한번에 기능을 붙여서 전체적인 MMORPG 게임을 구현해볼 예정이다. 맵 구성 -우선 서버에서도 클라이언트의 맵에 대한 정보를 들고 있어야 한다. 간단하게 프로토타입으로 가장 간단한 2차원 타일방식으로 맵을 구성하였다. 3D의 맵디자인이 필요한 게임이라면 복셀을 만들어서 복셀을 통해 맵데이터를 저장해야 한다.GridBuilder 클래스를 만들어 언리얼엔진의 Trace ch..
· C++
서버와 DB를 연동하기 위해 MariaDB를 사용했는데, 생각보다 c++ 연동에 대한 정보가 없어 직접 DOCS를 보면서 사용법을 정리해보았다.본 글은 Visual Studio 2022, MariaDB 11.3 version을 기준으로 작성되었다. Visual Studio 설정1. MySQL/MariaDB c/c++ connector를 다운https://mariadb.com/docs/server/connect/programming-languages/cpp/ 2. Visual Studio에서 헤더파일 설정MySQL/MariaDB를 사용하고자 하는 프로젝트에서속성 -> C/C++ -> 일반 -> 추가 포함 디렉터리 추가 포함 디렉터리에 설치한 c/c++ connector에 포함된 헤더파일 경로를 지정해준다...
· 서버
앞서 Spring은 기본적으로 멀티스레드 방식, Thread Pool에서 하나의 요청에 하나의 쓰레드를 배정하는 방식으로 작동한다. 이와 다르게 Javascript 런타임 중 하나인 NodeJs는 싱글스레드 방식으로 작동한다. 따라서 둘의 특징과 차이점을 공부해 본 내용을 정리해보았다. JavaScript 동작원리 JavaScript를 사용하면서 흔하게 접하는 것이 콜백(Callback)함수 개념이다. 주로 비동기 작업(Ajax, Timer)에 콜백함수를 연결하여 해당 콜백함수를 통해 비동기 작업의 결과를 통지받는 식으로 작성된다. 이처럼 Javascript에서는 비동기 작업마다 콜백함수를 대응하여 생각하게 된다. JavaScript의 특징은 크게 두가지이다. 싱글스레드와 비동기 논블로킹 I/O 이다. ..
· 알고리즘
문제 https://school.programmers.co.kr/learn/courses/30/lessons/92344 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 직관적으로, board를 순회하면서 각 skill의 크기에 맞게 값을 더해주면서 풀게되면 Worst case의 시간복잡도가 O(N*M*K) = 1,000 * 1,000 * 250,000 = 250,000,000,000 으로 효율성이 천장을 뚫어버리게 된다. 따라서 구간의 합을 쉽게 해주는 누적합을 떠올릴 수 있다. 누적합이란 말 그대로, 배열을 순회하면서 누적된 값을 해당 배열에 더해주..
· 서버
가장 많이 쓰이는 서버 프레임워크 중 하나인 Spring 프레임워크에 대해 알아보았다. 본 글은 완벽하게 Spring 프레임워크의 구조를 분석하기 보다는 다른 프레임워크와의 차이점, 특징등을 파악하기 위해 작성되었다. Spring 프레임워크 JAVA 기반의 오픈 소스 어플리케이션 프레임워크이며 주로 동적 웹 프로그래밍에 많이 쓰인다. 사용작 많은 오픈소스이기 때문에 규모가 매우 크고 대부분의 기능들이 개발되어 있다는 장점이 있다. 그 외에 특징은 특징 객체를 Bean이라는 인터페이스로 직접 관리한다. - 여기서 우리가 흔히 아는 Ioc(Inversion of control), DI(Dependancy Injection)이라는 개념이 사용된다. 기본적으로 Multi Thread 방식을 사용한다. - 사실 ..
멍텅구링
'분류 전체보기' 카테고리의 글 목록