일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- C
- 한국산업기술대학교
- random access
- thread
- 게임공학과
- 옵저버 패턴
- 유니크포인터
- 복사생성자
- 멀티코어
- EFFECTIVE C++
- stl
- 쓰레드
- 프레임워크
- material
- Multithread
- observer pattern
- Design Pattern
- Unreal
- vector
- c++
- 디자인패턴
- 스마트포인터
- multi-core
- MultiCore
- 메모리관리
- 멀티쓰레드
- Atomic
- 옵저버
- sequential
- 멀티코어 프로그래밍
- Today
- Total
목록stl (5)
태크놀로지
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/m8sxy/btqJyxuUTiw/Skk8TEklKkVgjEwESDoixk/img.jpg)
Ranking System 프로젝트 소개 및 구현내용 1-taek-gameprogramming.tistory.com/38 [C++/STL] Ranking System 소개 및 구현 프로젝트 소개 프로젝트 내용: 플레이어 랭킹 관리 프로그램 작성 프로그램 요구사항 STL Container, Iterator, Algorithm을 사용한다. 플레이어는 다른 플레이어와 구분되는 고유ID를 갖는다. 플레이어는 1-taek-gameprogramming.tistory.com 프로젝트 분석 ▶ 시퀀스 컨테이너 vs 연관 컨테이너 프로젝트의 주요 기능은 검색기능입니다. 연관컨테이너는 이진탐색트리구조로 되어 검색 기능의 특화되어있습니다. 시퀀스 컨테이너는 정렬된상태라면 이진탐색이 가능하여 빠른 검색이 가능합니다. 검색기능..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b3AOTH/btqJCdboLbD/D9uAoDDUOhiFlXDFw5PAFK/img.jpg)
프로젝트 소개 프로젝트 내용: 플레이어 랭킹 관리 프로그램 작성 프로그램 요구사항 STL Container, Iterator, Algorithm을 사용한다. 플레이어는 다른 플레이어와 구분되는 고유ID를 갖는다. 플레이어는 챔피언스리그 / 떼탈출에서 얻은 점수를 멤버변수로 갖는다. 초기화 100,000 명의 플레이어를 생성한다. 랜덤엔진을 사용하여 플레이어의 점수를 생성한다. 게임진행 - 한 번 진행할 때마다 게임 한 시즌이 끝났다고 가정한다. 전체 100,000 플레이어 중 임의의 50,000 명의 플레이어가 떼탈출을 플레이한다. 또 다른 임의의 50,000 명의 플레이어가 챔피언스리그를 플레이한다. 떼탈출에서 획득한 점수는 0~2,905,887,026점 사이의 정규분포값을 갖도록 설정한다. 챔피언스리..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/pKYUu/btqILLGsUzs/A6X0UbMojJQw6MQsqTDH00/img.png)
옵저버 패턴의 단점 옵저버 패턴을 구현시 알림이 있을 때마다 동적할당을 하거나 큐잉하기 때문에 실제로 느릴 수 있습니다. 하지만 인터페이스를 통해 동기적으로 메서드를 간접호출할뿐 메시지용 객체를 할당하지도 않고, 큐잉도 하지 않습니다. 주의해야할점은 동기적이라는 점입니다. 대상이 관찰자 메서드를 직접 호출하기 때문에 모든 관찰자가 알림 메서드를 반환하기 전에는 다음 작업을 진행할 수 없습니다. 관찰자 중 하나라도 느리면 대상이 블록될 수 도있기 때문입니다. 이벤트에 동기적으로 반응한다면 최대한 빨리 작업을 끝내고 제어권을 넘겨주어 프로그램이 멈추지 않도록 해야합니다. ( 멀티쓰레드 사용시 이벤트 큐를 이용해 비동기적으로 상호작용하는것을 추천 ) 동적할당이 많이 일어날까? 게임에선 옵저버 개수가 정적인것이..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/blyXwP/btqGgxdYrHO/NuQlgv4N8dOFG39s0yEVN1/img.jpg)
STL std::vector vector가 어떤 방식으로 작동하고 메모리를 관리하는지에 대해 이해해봅시다. vector 컨테이너는 자동으로 메모리가 할당되는 배열입니다. 랜덤 엑세스 구조로 순회하는데는 최고의 성능을 보여주지만, 중간값을 삽입 삭제시 복사 이동연산으로 인해 효율이 많이 떨어지게 됩니다. std::vector 메모리 할당 과정 #include #include using namespace std; class TEST { private: int data; public: // 복사 생성자 TEST(const TEST& other) { cout
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/0C0JR/btqEv0osIlZ/8ChZ5RzeQkGZ3jCN0bmgU1/img.jpg)
스마트 포인터 C++에서 동적할당시 반드시 메모리 해제를 해주어야, 메모리 릭이 나지 않습니다. 이때 스마트포인터는 객체 사용이 끝날시, 자동으로 메모리를 해제시켜줍니다. STL의 std::unique_ptr 코드 분석 스마트포인터는 해당객체의 소유권을 갖고 있을때만, 해당 객체를 삭제할수있다. 즉 복사가 일어난 객체의 포인터를 갖고있을경우, 정상적인 메모리해제가 일어나지 않을수있다. 따라서 복사생성자와, 복사대입연산자가 삭제되어있다. // CLASS TEMPLATE unique_ptr SCALAR template class unique_ptr { // non-copyable pointer to an object public: using pointer = typename _Get_deleter_point..