일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- sequential
- 멀티쓰레드
- 한국산업기술대학교
- EFFECTIVE C++
- C
- 유니크포인터
- Unreal
- 스마트포인터
- 프레임워크
- 메모리관리
- MultiCore
- random access
- 디자인패턴
- thread
- material
- stl
- 옵저버
- 쓰레드
- observer pattern
- multi-core
- 게임공학과
- Multithread
- 옵저버 패턴
- Design Pattern
- c++
- 멀티코어 프로그래밍
- vector
- 복사생성자
- Atomic
- 멀티코어
- Today
- Total
목록분류 전체보기 (57)
태크놀로지
개발환경 WIN API, C++ 게임소개 2D 아케이드 액션,슈팅게임 메탈슬러그 모작입니다. 개발기간 일주일 https://youtu.be/fQmzH20Yb4g 씬 플로우 타이틀 캐릭터 선택 스테이지 게임오버 보스 게임오버 게임엔딩 기술적요소 직선의 방정식을 사용하여, 라인태우기를 통한 맵 이동 상/하체 2D 스프라이트 애니메이션 포물선운동, 점프 기능 윈도우 좌표계에서의 렉트 충돌, 충돌처리 스폰 시스템 구성 (설치해놓은 스폰바와 충돌시, 정해진 개수의 몬스터가 등장) 컨텐츠 무기 : 일반권총 / 샷건 / 폭탄(3번 튕기며 힘감소) NPC (노인) : 무기와 총알아이템을 랜덤으로 드랍 몬스터 : 머미(공격패턴 : 폭탄드랍, 브레스), 박쥐(공중에서 폭탄 드랍) 보스 : 4가지 패턴 (유도탄 / 대쉬 /..
자원(resource)이란, 사용을 일단 마치고 난 후엔 시스템에 돌려주어야 하는 모든 것을 말한다. ※ 자원을 가져와서 다 썼으면, 무조건 해제해주어야 한다. 이번 포스팅 내용 객체 기반 방식의 C++가 지원하는 생성자, 소멸자, 객체 복사함수를 사용하여 자원관리 하는것을 다루겠다. 1. 객체를 사용하여 자원을 관리하자 class Investment{ public: Investment() { cout
1. 대입연산자는 *this의 참조자를 반환하게 하자 (convention) int x,y,z; x = y = z = 15; 위와 같이 대입연산은 여러개가 사슬처럼 엮일 수 있다. x = (y = (z = 15)); 또 하나의 특성은, 우측 연관 연산이라는 점이다. class Widget{ public: Widget& operator= (const Widget& rhs){ //... return *this; } } 이렇게 대입 연산이 사슬처럼 엮이려면 대입연산자는 좌변인자에 대한 참조자를 반환하도록 구현되어야 한다. (일종의 convention) +=, -=, *= 등 모든 형태의 대입연산자에서도 Convention이 적용된다. 2. operator=에서 자기대입에 대한 처리가 빠지지 않도록 하자 cla..
생성자 : 새로운 객체를 메모리에 만드는데 필요한 과정을 제어하고 객체의 초기화를 맡는다. 소멸자 : 객체를 없앰과 동시에 그 객체가 메모리에서 적절히 사라질 수 있도록 하는 과정을 제어한다. 대입연산자 : 기존의 객체에 다른 객체의 값을 줄 때 사용하는 함수 : 다음포스팅에서 진행 1. C++이 자동으로 만들어서 호출해 버리는 함수들에 촉각을 세우자 클래스안에 직접 선언해 넣지 않으면 컴파일러가 스스로 선언해 주도록 되어 있는 함수들 class Empty{ public: Empty() = default; Empty(const Empty& rhs) = default; ~Empty() = default; Empty& operator=(const Empty& rhs) = default; } 암시적(Impli..
초기화 : 객체가 항상 초기화 된다는 보장이 없다. 따라서 모든 객체를 사용하기전 항상 초기화 해주어야한다. 1. 대입과 초기화와 헷갈리지 말자. class X; // 멤버변수 theName, theAddress ,,, // 1. 대입 : 초기화가 아닌 대입이 되고 있다. X(name, address,,,) { theName = name; theAddress = address; ,,, } // 2. 초기화 : 멤버 초기화 리스트 X(name, address,,,) : theName(name), theAddress(address) ,,, 두번째 방법이 왜 더 효율적인가? 첫번째 방법은 기본생성자를 통해 미리 초기화 한후, 값을 대입해주고 있다. -> 기본생성자 호출 -> 복사 대입연산자 호출 두번째 방법은..
1. define 대신 const, enum, inline을 사용하자 왜? #define ASPECT_RATIO 1.653 의 경우 우리는 ASPECT_RATIO로 알지만, 컴파일러에게 넘어가기전 숫자 상수로 밀어버리게 됨 에러메시지에 ASPECT_RATIO가 아닌 1.653으로 나타남 따라서 매크로 대신 const 상수를 사용하자! 상수를 사용할 경우 기호 테이블에 들어감. 디버깅시 확인가능 부동소수점 실수 타입일 경우, 컴파일을 거친 최종 코드 크기가 더 작게 나올 수 있음 -> 코드에서 ASPECT_RATIO를 사용한 코드마다 1.653으로 변경하는 사본이 생기기 때문 2. 클래스 내에 static 멤버 // header class GamePlayer{ private: static const int..
논블로킹 자료구조 Linked List 뮤텍스를 사용한 자료구조부터해서 논블로킹 자료구조까지 여러 단계 변화를 하며 각각에 대해서 성능향상을 비교해본다. 목표자료구조 - Set 아이템의 중복을 허용하지 않음 검색의 효율성을 위해 아이템은 정렬되어 저장됨 삽입 삭제의 효율성을 위해 링크드리스트로 구현된다. 값을 저장하고 있는 노드 뿐만 아니라, 무한대값을 갖고있는 보조노드를 두어 검색할때마다 널체크를 하지 않아도 된다. 구현할 메서드 Add Remove Contains(집합에 x가 있다면 true 반환) 실습 - 성긴동기화 성긴동기화 - Lock 하나로 동기화 객체 전체를 감싸는 경우 리스트는 하나의 잠금을 갖고 있으며 모든 메서드호출은 이 잠금을 통해 Critical Section으로 진행된다. 모든 메..
이전시간 리뷰 현실의 공유 메모리는 Atomic 하지 않다. 하지만 프로그래밍은 Atomic Memory를 가정해야한다. 성능 향상을 위해 멀티쓰레드 프로그래밍을 해야한다. -> Data Race 발생 Data Race를 최소화 해야한다. -> Data Race는 모든 오동작의 근원 어쩔 수 없이 남은 Data Race를 Lock 없이 해결해야한다. -> Data race를 모두 없앨 순 없고, lock으로 해결하는 것은 성능 패널티가 크다. Data Race는 공유 객체 때문에 발생한다. -> 객체 int, float, struct, class, container ,,, 따라서 논블로킹 멀티쓰레드 객체가 필요하다. Q. 기존의 싱글쓰레드 자료구조도 Atomic Memory를 사용해서 멀티쓰레드 자료구조..