Game Programming 57

[C++] 순차 컨테이너와 벡터

[C++] 순차 컨테이너와 벡터 순차 컨테이너 (Sequence Container) 요소들의 보관 순서를 유지할 수 있도록 해주며 어떤 위치든 삽입, 제거가 가능하지만 성능에 있어서는 각각 다른 특성들을 가진다. 종류는 벡터, 데큐, 리스트 등이 있다. 벡터 (Vector) #include //... Vector vName; //Ex vector vInt; int a = 5; vInt.push_back(a); ▹ 원하는 위치에 추가/제거 가능하다. ▹ 양방향 반복자를 제공한다. 전/후진으로 요소에 접근 가능하다. ▹ C의 배열과 기능은 비슷하지만 미리 할당할 필요가 없으며, 추가할 수 있는 요소에 제한적이지 않다. ▹ 모든 요소를 하나의 큰 블럭에 보관한다. 생성자와 반복자 //생성자 vector v; ..

[C++] STL

[C++] STL STL (Standard Template Library) 여러가지 다른 구조를 보관하기 위한 컨테이너와 컨테이너 내의 요소를 접근하기 위한 반복자, 그리고 컨테이너에 특정한 작업을 위한 알고리즘 클래스로 구성되어 있다. 컨테이너 순차 컨테이너와 연관 컨테이너로 구성되어 있으며, 여러가지 구조 데이터를 보관하는 객체이다. - 순차 컨테이너 : 요소들을 보관된 순서를 유지할 수 있게 해주며, 어떤 위치든 삽입, 제거가 가능하지만 성능에 있어서는 다른 특성을 가진다. / 벡터, 데큐, 리스트 등 - 연관 컨테이너 : 정렬 연관 컨테이너와 해쉬 연관 컨테이너 두 분류로 존재한다. 특정 요소에 대한 빠른 검색을 제공하며 사용자가 지정한 순서가 아닌 자신의 규칙에 따른 순서로 보관한다. / 세트,..

참조 카운트란 무엇인가?

참조 카운트란 무엇인가? 참조 카운트 (Reference Counting) 동적으로 할당된 메모리 주소가 참조될 때마다 count를 1증가 시키고, 참조를 끊을 땐 1감소 시킴으로서 count를 체크하여 0이 될 경우 즉시 메모리를 헤제하는 방식이다. 기존의 알아봤던 스마트 포인터 중 shared_ptr이 참조카운트 방식으로 동작한다. 참조 카운트의 장점 ▹ 메모리를 직접 해제하는 번거로움이 사라진다. ▹ 객체의 소유권을 공유할 수 있다. ▹ 빠르다 참조 카운트의 단점 ▹ 순환 참조 문제가 있다.(A가 B를 참조, B가 A를 참조시 영원히 해제되지 않는 경우 발생) ▹ 참조회수는 너무 자주 바뀌는데 멀티 쓰레드 환경에서 사용 시 lock이나 atomic연산이 필요하다. 기존의 동적 메모리 할당 해제를 자..

크리티컬 섹션이란 무엇인가?

크리티컬 섹션이란 무엇인가? 크리티컬 섹션(Critical Section)이란? 임계구역으로 한 순간에 하나의 쓰레드만 접근이 요구되는 공유 자원(Code, Data, Heap)에 접근하는 코드 영역을 말한다. 위와 같이 공유자원이 한번에 한 쓰레드만 요구를 하는 상황에서 여러개의 쓰레드가 그 공유 자원에 접근을 한다면 문제가 생길 것이다. 이 문제 해결을 위해 뮤텍스와 세마포어라는 방법이 있다. 뮤텍스(Mutex)는 무엇인가? Mutual Exclusion(상호배제)의 약자로 쓰레드의 동시 접근을 허용하지 않는다는 의미이다. 즉, 어떤 한 쓰레드가 한 공유자원을 먼저 접근을 했다면 잠김상태가 되어 다른 쓰레드의 접근을 허용하지 않는 느낌이다. 세마포어(Semaphore)는 무엇인가? 뮤텍스는 한개의 쓰..

[OS] 쓰레드

[OS] 쓰레드 프로세스의 생성과 종료 쓰레드를 알기에 앞서 프로세스가 어떻게 생성되고 종료되는지 알필요가 있다. 컴퓨터가 부팅이 되면 OS가 처음으로 수행하는 일중 하나는 최초의 프로세스를 생성하는 것이다. 그리고 프로세스는 프로세스에 의해서 만들어진다. 즉, 처음으로 만들어진 프로세스가 다른 프로세스를 만들고 그 프로세스가 다른 프로세스를 만드는 과정을 반복한다. 쓰레드 (Thread) 프로세스의 실행단위이며 프로세스내부의 흐름을 말한다. 일반적으로 하나의 프로세스 하나의 쓰레드를 갖지만 2개 이상의 쓰레드를 가질수 있다. 즉, 프로세스는 OS로 부터 자원을 할당받은 작업의 단위이고 쓰레드는 이 프로세스가 할당받은 자원을 이용하는 실행의 단위이다. 쓰레드는 하나의 프로세스 내에 Heap, Static..

Game Programming/OS 2022.09.13

[OS] 컴퓨터 구조와 운영체제

[OS] 컴퓨터 구조와 운영체제 컴퓨터 구조 CPU : CPU = ALU(산술 논리 장치. 연산 장치) + 레지스터. 계산 장치(빨리 계산되는 속도 = Hz)이기 때문에 속도로 이야기를 한다. Memory : 저장 장치 (휘발성 데이터)이며 명령어들의 집합이 저장되고 CPU로 보내진다. Disk : 저장 장치 (반영구적인 파일로 저장). 파일단위로 프로그램들이 저장이 된다. 산술논리장치(ALU - Arithmetic Logical Unit) :CPU로 들어온 모든 데이터들을 연산하는 장치 레지스터 : CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억 장치 운영체제 (OS - Operating System) 사용자가 컴퓨터를 사용하기 위해 필요함 소프트웨어이며, 일반적으로 컴퓨터를 사용..

Game Programming/OS 2022.09.13

렌더링 파이프라인이란 무엇인가?

렌더링 파이프라인이란 무엇인가? 렌더링 파이프라인이란? 그래픽스 파이프라인이라고도 불리며 3D 컴퓨터 그래픽스에서 3차원 도형 혹은 이미지를 2차원 래스터 이미지로 표현하기 위한 단계적인 방법이다. 래스터 이미지란 컴퓨터에서 어떠한 도형 혹은 이미지를 픽셀로 구성하고 조합하여 일정한 간격으로 나열하여 하나의 화면을 표현하는 것을 의미한다. 렌더링 파이프라인 과정 DirectX9 기준 렌더링 파이프라인 입력 조립(Input Assembly) ↓ 정점 쉐이더(Vertex Shader) ↓ 래스터 라이저(Rasterize) ↓ 픽셀 쉐이더(Pixel Shader) ↓ 출력 병합(Output Merger) DirectX11 기준 렌더링 파이프라인 입력 조립(Input Assembler) : 정점 정보를 정점 버..

가비지 컬렉터와 스마트 포인터란 무엇인가?

가비지 컬렉터와 스마트 포인터란 무엇인가? 가비지 컬렌션은 무엇인가? 가비지 컬렉션(Garbage Collection)이라고 불리면 약어로 GC라고도 부른다. 메모리를 관리하는 방법 중에 하나로, 시스템에서 더이상 사용하지 않는 동적 할당된 메모리를 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것을 의미한다. 그리고 이 GC를 수행하는 부분을 가비지 컬렉터라고 부른다. 더이상 필요없는 메모리는 쓰레기라고 하며 이 쓰레기를 효과적으로 처리하는 작업이 가비지 컬렉션이라 하며 이 작업을 수행하는 것이 가비지 컬렉터이다. 가비지 컬렉터가 하는 역할 ▸ 메모리 할당 ▸ 사용 중인 메모리 인식 ▸ 사용하지 않는 메모리 인식 가비지 컬렉터의 한계 실시간으로 쓰레기를 수집해야하기 때문에 런타임 동안 작업을 하며 ..

[C++] 메모리 할당

[C++] 메모리 할당 C++ 프로그램들은 실행하는 동안 변수처럼 새로운 개체를 만들 때 메모리를 할당해야한다. 그리고 메모리 구조는 크게 데이터, 코드, 힙, 스택 영역으로 분류하며 각각의 역할이 정해져있다. 메모리 할당을 정리하기에 앞서 메모리 구조에 대해 알아볼 필요가 있다. 스택과 힙에 대해서 먼저 알아보겠다. 스택 (Stack) 함수에 전달되는 인자(매개변수), 함수내에 저장되는 지역 변수 등이 저장되는 곳이다. ▸ 한정된 범위 내에서 임시적으로 사용될 때 좋다. ▸ LIFO(Last In First Out)구조를 가지며, 가장 나중에 들어온 것이 먼저 나가는 구조이다. ▸ 제한된 크기를 가지고 있어 용량을 초과하는 개체를 넣으면 스택오버플로우 현상이 발생한다. 힙 (Heap) 사용자가 직접 관..

[C++] 형변환과 템플릿

[C++] 형변환과 템플릿 형변환 데이터를 다른 데이터 형으로 바꾸는 과정이다. int num = 250; float fNum1 = num/100; //fNum1 == 2.0f float fNum2 = (float)num/100; //fNum2 = 2.5f 명시적 형변환 float fNum3 = num; //묵시적 형변환. 컴파일러가 형을 변환해준다. 형변환을 해야하는 경우 1. 다른 코드 섹션의 인터페이스가 특정한 형을 요구할 때 2. 개체의 다형적 이용 C++ 스타일 형변환 ▷ static_cast 정적 형변환, 컴파일 타임에 형변환이 가능한지 검사한다. class A {}; class B : public A {}; class C {}; A* a = new A(); B* b = static_cast(..