SMALL

분류 전체보기 103

Vector

#include #include using namespace std; // vector는 동적으로 크기를 변경할 수 있는 배열 // typedef은 자료형에 대한 별칭을 지정 typedef vector dataList; typedef dataList::iterator itor; int main() { // 포인터형으로 변수 선언 dataList* pDataList = new dataList; itor it; // 위와 동일 //vector* pData = new vector(); //vector::iterator it; // 벡터의 크기를 할당 // 10개의 원소를 저장할 배열 pDataList->reserve(10); // 데이터 추가 pDataList->push_back(10); pDataList->..

int형 나누기 문제

캐릭터의 경험치 진행율?을 구하기 위해 현재 경험치(Int형)와 목표 경험치(Int형) 변수 2개를 나눗셈하여 float형 변수 progress에 받으려고 했다. 그러나 progress 값이 계속해서 0이 되는 결과값을 받았다. 이는 int와 float의 표현방식의 차이로 인해 발생하는 문제이다. 따라서 float형으로 받기 위해서는 아래 스크립트와 같이 어느 한쪽을 float형으로 바꿔줘야 한다. (int / float) 형태의 계산 방식을 사용해야 옳바른 값을 받을 수 있다. 양쪽 모두 float로 변환해도 무방하지만 한쪽만 해도 상관없다.

유니티 드로우콜

Draw Call - CPU가 GPU에게 연산 명령을 던져주는 것을 의미 - CPU와 GPU 는 병렬 관계로 처리하며, CPU가 GPU에게 명령을 던져줌으로 GPU가 랜더링과 같은 처리를 시작함 - CPU는 명령은 던져주고 나서 다시 자기 일을 처리하기 시작 - 만약 또 다시 CPU가 GPU에게 명령을 던져주려 할 때 GPU가 이전 처리가 완료되지 않았다면, CPU는 처리를 기다리게 됨 - CPU와 GPU는 서로 다른 프로세스 유닛이기에 통신 비용이 발생 - 랜더링하기 전에 CPU에서 수많은 정보를 설정해줘야 함 ex) Vertex Buffer, Alpha Blending, Use Z-Buffer, Trasnform, Texture, Shader, Change States, Draw 등 Command B..

선택 알고리즘

선택 알고리즘이란? - n개의 원소가 불규칙하게 저장된 배열에서 i 번째 작은 원소(또는 큰원소)를 찾는 문제를 해결하기 위한 알고리즘 - 정렬과 비슷하다고 할 수 있음 - 두 가지 알고리즘 ㄴ 평균적으로 선형시간이 소요되는 알고리즘 ㄴ 최악의 경우에 선형시간이 소요되는 알고리즘 평균 선형시간 선택 알고리즘 - 퀵 정렬처럼 분할한 후 자기호출 방법을 이용하여 평균적으로 선형시간에 i번째 작은 원소를 찾는 것 - 배열 A에서 i 번째 원소 찾기 1) 원소가 하나뿐인 경우, 그 하나를 리턴 2) 원소가 다수인 경우, 먼저 파티션을 통해 중간값이 몇 번째인지 확인 3) 중간값이 i와 같을 경우, A[파티션을 통해 얻은 중간] 값을 리턴 4) 중간값이 i 보다 클 경우, 오른쪽 그룹으로 범위를 좁혀 재귀적으로 ..

다차원검색트리(KD-트리, KDB-트리, R-트리)

KD-트리 1) 이진검색트리를 확장 · k(k≥2)의 필드로 이루어진 키 사용 · 각 레벨에서 필드를 번갈아가며 검색에 사용 - 한 레벨에서는 하나의 필드만 사용 - 총 k개의 필드를 사용하는 검색이라면, k개의 레벨을 내려가면 검색에 사용하는 필드가 일치 - 기준 노드의 값과 비교 노드의 값으로 노드의 위치를 결정 - A의 x값을 기준으로 B는 왼쪽, C는 오른쪽에 위치 - B의 y값을 기준으로 D는 왼쪽, E는 오른쪽에 위치 - C의 y값을 기준으로 F는 오른쪽에 위치(크거나 같을 경우라면) - D의 x값을 기준으로 G는 왼쪽에 위치 2) KD-트리 검색 - 임의의 키가 입력되면, 각 필드를 차례대로 사용해서 트리를 검색 3) KD-트리 삽입 - 검색하듯이 트리를 따라 내려가다 리프 노드를 만나면 거..

객체지향의 5원칙 SOLID

디자인 패턴이란 객체에 대한 설계의 패턴을 말한다. - 객체의 기능 정의 - 객체의 관계를 규정(설계) 객체에 데이터를 요구하지 말고 작업을 요청하라. - 작자 미상 '토비의 스프링' 이라는 책에서 언급된 말로서 객체 지향은 데이터를 감추고 객체의 기능을 사용해야 한다는 것을 뜻한다. 객체지향의 5가지 원칙(SOLID) - SRP(Single Responsibility Principle) : 단일 책임 원칙 · 하나의 클래스는 하나의 책임만 가져야 한다. 다르게 말하면 하나의 클래스에 많은 기능 또는 목적을 집약시키는 것은 피해야 한다. · 많은 기능을 가진 클래스는 유지보수가 어렵다. S/W는 변화에 대응해야 하기에 유지보수는 불가피하다(유지보수는 숙명이다). · 따라서 설계 시 반드시 성능보다 유지보..

OOP 2022.06.23

13-2. 유저 모드 동기화

크리티컬 센션(임계 영역) 기반의 동기화 - 일종의 Key(열쇠)를 가지고 접근하도록 하게 함 CRITICAL_SECTION gCriticalSection; // 임계영역 오브젝트(Key에 해당) InitializeCriticalSection(&gCriticalSection); // 오브젝트 초기화(동기화 작업 준비) ..... // 임계영역 진입을 위해 임계영역 오브젝트 획득 EnterCriticalSection(&gCriticalSection); // 열쇠 획득 /*임 계 영 역 */ // 임계영역 오브젝트 반환 LeaveCriticalSection(&gCriticalSection); // 열쇠 반환 ..... DeleteCriticalSection(&gCriticalSection); // 열쇠 소멸..

13-1. 쓰레드 동기화의 개념/임계 영역 접근 동기화

- 임계 영역 => 둘 이상의 쓰레드가 동시에 동일한 메모리 영역에 접근하도록 하는 코드 블럭 : 메모리 접근 동기화가 필요 - 여러 쓰레드의 실행 순서가 필요한 경우 : 순서 동기화(Chapter 14에서 다룰 예정) 쓰레드 동기화 기법의 두 가지 구분 : 유저 모드 동기화, 커널 모드 동기화 동기화 기법 유저 모드 동기화 커널 모드 동기화 Pros 커널 모드와의 빈번한 이동이 없기에 속도가 빠름 다양한 기능을 다룰 수 있음 Cons 커널 모드보다 기능이 제한적 유저 모드와의 이동으로 속도가 느림 유저 모드 동기화 - 크리티컬 섹션(임계 영역) 기반 동기화 - 인터락 함수 기반 동기화 커널 모드 동기화 - 뮤텍스 기반 동기화(접근 동기화) - 세마포어 기반 동기화(접근 동기화) - 이름있는 뮤텍스 기반..

LIST