Fundamentals

[C++] chrono

September 07 2025

chrono C++11에서 추가된 시간 관련 라이브러리

[C++] string_view

September 01 2025

string_view C++17부터 추가된 타입 문자열의 길이와 문자열에 대한 포인터만 가지고 있다 string 보다 훬씬 가볍다 null 종료 문자를 가지지 않는다

[C++] memcpy와 memmove

August 07 2022

memcpy destination 주소값, source 주소값, source의 길이를 인자로 받는 함수 sdource의 값을 destination으로 복사

[3D Graphics] Framebuffers

May 22 2022

버퍼란? Buffer 데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리 영역

[C++] Return Value Optimization

April 06 2022

임시 값 할당 인자 C++ 에서는 임시값을 const reference와 rvalue reference, 그리고 값으로서의 함수 인자로 받도록 허용한다 non-const reference 인자를 받는 함수는 함수 실행 중 인자를 수정하고서 변경된 상태로 다시 caller로 돌아가는 것을 허용한다

[C++] Stack Overflow

March 01 2022

발생 이유 Stack 메모리의 크기는 스레드가 초기화될 때 고정된 크기로 결정 사용량을 초과하여 사용한다면 소프트웨어는 undefined behavior 야기 Stack 영역의 메모리가 지정된 범위를 넘어갈 때 발생 한 함수에서 너무 큰 지역 변수를 선언 함수를 재귀적으로 무한정...

[C++] Runtime Type Information

March 01 2022

RTTI란 C++ 컴파일러 내에 있는 객체의 타입 정보를 알아내는 기능 런타임에서 포인터가 가리키는 객체의 타입을 알 수 있게 해주는 방법 객체의 타입을 런타임에서 결정할 수 있도록 허용 메모리 상주 객체에 타입 정보 추가 런타임에서 객체의 캐스팅이 유효한지 알아내기 위해, 객체를 특정 타입으로 결정한...

[C++] Multiple Inheritance

November 16 2021

다중 상속 Multiple Inheritance C++에서는 C#과 다르게, 다중 상속을 허용 기반 클래스의 멤버 또는 메서드의 이름이 동일한 경우 주의해야 한다

[3D Graphics] Transforming - World

November 15 2021

Translation 어떤 P1 (x, y)를 P2(x’, y’)로 이동 두 점 사이의 거리는 (Tx, Ty) x’ = x + Tx y’ = y + Ty

[C++] DFS & BFS

November 14 2021

DFS Depth-Frist Search 현재 분기를 완벽하게 탐색한 뒤 다음 분기로 이동 현재 노드와 인접한 노드를 우선 탐색 더 이상 인접한 노드가 없을 때까지 반복 그래프 내에 cycle 여부를 확인할 때 사용

[C++] Memory Allocator

November 13 2021

new/delete를 사용하지 않는 이유? 기능의 과도한 범용성 메모리 할당 너머의 hidden behavior 수행 불충분한 기능

[3D Graphics] VSync와 Anti Aliasing

November 12 2021

수직동기화 VSync 화면주사율과 게임 화면의 FrameRate를 동기화 모니터는 각각 고유의 주사율이 있다 60Hz는 1초에 60번 스크린을 업데이트 한다는 의미 하드웨어 고유의 제한 사항이므로, 프로그램 및 PC 성능과 무관 게임 프레임은 게임 Scene을 1초에 몇 번 그리는지를 의미 ...

[C++/C#] Template vs. Generic

November 11 2021

C++ Template vs. C# Generic C++ 은 컴파일이 1번 일어나고, C# 제네릭은 컴파일이 2번 일어난다. C++ 템플릿은 사용하지 않으면 컴파일하지 않는다. 하지만, C# 제네릭은 사용하지 않더라도 그에 관련된 정보를 저장하기 위한 메타데이터가 생성된다. 제네릭은 비형식 탬플릿 ...

[C++] Heap과 Priority Queue

October 29 2021

Heap 구조체 우선순위 큐를 위해 만들어진 자료구조 여러 값들 중 최솟값이나 최댓값을 빠르게 탐색하기 위한 자료구조 반정렬 상태를 유지 작은 값은 하위, 큰 값은 상위에 있는 정도 이진 트리와는 달리, 중복된 값을 허용 이진 트리에서 특정한 조건을 갖춘 구조체 트리의 높이 h가...

[Design Pattern] Adapter 패턴

October 28 2021

Adaper 패턴 인터페이스를 제공함으로써 호환되지 않는 원본 인터페이스를 이용할 수 있게 함 라이브러리의 업데이트 및 교체에 유연하게 대처할 수 있음

[C++] 스마트 포인터 - shared_ptr

October 24 2021

shared_ptr 여러 개의 스마트 포인터가 하나의 객체를 같이 소유해야하는 상황 하나의 자원을 몇개의 포인터가 가리키는지 추적하는 포인터 control block을 할당하여 복사를 허용 각 shared_ptr 객체에 저장되는 것이 아니라 실제 객체를 가리키는 control block을 할당 객체를 가리키는...

[C++] exception

October 23 2021

예외란? 정상적인 상황에서 벗어난 모든 예외적인 상황들

[C++] decltype

October 22 2021

decltype 식별자 표현식이 아닌 식을 인자로 받고, 그 타입을 T라고 했을 때 식의 값이 xvalue인 경우 -> T&& 를 리턴 식의 값이 lvalue인 경우 -> T& 를 리턴 식의 값이 prvalue인 경우 -> T 를 리턴 decltype...

[C++] STL - map vs. unordered_map

August 20 2021

map 레드 블랙 트리 기반 검색속도가 빠른 Binary Search Tree(BST) + Self-Balancing 기능을 추가 O(logN)을 보장하는 수준으로 Balancing 키 값의 분포가 고르지 못할 경우 node rotation에 대한 비용이 계속 발생하기에 Insert / Delete 성능이...

[C++] PP vs. OOP vs. DOP

August 11 2021

Procedural Programing (절차적 프로그래밍) 데이터를 중심으로 함수를 만들어 사용 프로그램이 함수화 되어 순차적으로 처리 프로그램 전체가 유기적으로 연결 장점 컴퓨터의 처리구조와 유사해 실행속도가 빠름 단점 유지보수가 어려움 실행 순서가 정해져 있으므...

[3D Graphics] Texture 사이즈

July 30 2021

Texture 사이즈를 2의 제곱수로 세팅하는 이유 오늘날 대부분의 GPU는 이러한 제약으로부터 자유롭다 (NPOT) RAM을 사용할 때 NPOT 이미지는 그보다 큰 사이즈의 POT로 확장된다 이 과정에서 메모리는 낭비된다 확장된 사이즈만큼 가장자리에 edging artifact가 발생할 수 있다 ...

[C++] inline

July 14 2021

함수 호출 비용 함수 호출될 때마다 일정량의 성능 오버헤드 발생 CPU가 다른 레지스터와 함께 실행 중인 현재 명령어의 주소를 저장해야 힘 나중에 반환할 위치를 알 수 있도록 모든 함수 매개 변수를 생성 새 위치로 분기하기 보다 내부 작성 코드(인스턴트 코드)가 더 빠름

[C++] Callback

July 14 2021

Callback 함수 다른 프로그램 또는 다른 모듈에서 호출될 함수를 알려주고, 그 함수를 호출하도록 하는 방법 일반적으로 OS가 호출할 어플리케이션의 함수를 지정해 특정한 사건 / 메세지가 발생하면 호출하도록 지정 일반 함수 호출 클라이언트에서 서버의 함수를 호출하여 사용 콜백 함수 호출 ...

[C++] friend 키워드

February 05 2021

friend class 한 class에서 다른 class의 field를 public으로 참조하도록 허용

[C++] STL - Vector, List, Queue

November 03 2020

컨테이너의 종류 Sequence Container 객체를 순차적으로 보관 ex) vector, list, queue, … Associative Container 키를 바탕으로 대응되는 값 함께 보관 키로 탐색하여 값을 반환 ex) map, set, unord...

[C++] Template

November 03 2020

템플릿(Template)이란 함수나 클래스를 개별적으로 다시 작성하지 않아도, 여러 자료 형으로 사용할 수 있도록 하게 만들어 놓은 틀 함수 템플릿(Function Template)와 클래스 템플릿(Class Template)으로 분류

[C++] STL - Map, Set

November 03 2020

Binary Search 이미 정렬되어 있는 데이터를 대상으로 탐색 중간 값인 pivot을 기준으로 left와 right으로 나누어 탐색 값을 찾을 때까지 위의 과정을 반복

[C++] Overriding과 Overloading

November 02 2020

Overloading 같은 이름의 메서드를 여러 개 정의 매개변수의 타입이 다르거나, 갯수가 다름 리턴 타입이나 접근 제어자는 영향을 주지 않음

[C++] if와 switch

July 16 2020

if 가장 위 if 구문부터 시작해 조건이 충족되는지 컨디션 체크 느린 속도 if, else if 가 많아질수록 Assembly: CMP도 많아짐 범위 식도 체크 가능

[C++] Shallow Copy vs. Deep Copy

July 16 2020

Shallow Copy 객체를 복사할 때 원래값과 복사된 값이 같은 참조를 가리키고 있는 것 객체의 ‘값’만 복사

[C++] const과 volatile

July 15 2020

Read-Only 변수의 값을 변경할 수 없다 메서드에서 클래스의 멤버 변수를 변경할 수 없다

[C++] static

July 14 2020

함수의 static 변수 함수 안에서 선언된 static 변수 값이 고정됨 multi-thread hardware interrupt timer

[C++] Memory Layout

July 14 2020

C/C++ 메모리 레이아웃 Text segment 기계어로 변환된 실행코드가 메모리 or obj에 저장

[C++] Casting

July 14 2020

static_cast 논리 형변환 주로 Scalar Type들 간의 캐스팅 형 변환 함수가 정의되어 있으면 이 함수를 호출하면서 실행 연산자 오버로딩을 통하여 변환 가능한 자료형을 추가할 수 있다 컴파일 타임에서 캐스팅

[3D Graphics] 3D Picking

February 08 2020

Painter’s Algorithm 각 object마다 고유 색깔을 지정 offline buffer (screen에 노출되지 않는 버퍼)를 기본 framebuffer size만큼 사용 Two pass 사용 picking pass (1st pass) offline color 버퍼에 고유 ...

[3D Graphics] Forward Rendering vs. Deferred Rendering

February 04 2020

포워드 렌더링(Forward Rendering) 가장 보편적이고 일반적인 렌더링 방법 픽셀 당 쉐이딩과 라이팅 연산 값을 추가하는 방식 각 fragment shader에서 연산 빛의 개수 만큼 함 투명도 처리, 안티얼라이징 가능 라이팅 및 쉐이딩 연산 오버헤드

[Design Pattern] 팩토리 패턴(Factory Pattern)

January 13 2020

탬플릿 메소드 패턴(template method pattern) 소프트웨어 공학에서 동작 상의 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계들을 다시 정의할 수 있게 해준다 base class가 알고리즘 구조의 주요 골조를 확립 subclass가 나머지...

[Design Pattern] 빌더 패턴(Builder Pattern)

January 13 2020

빌더 패턴(Builder Pattern) 빌더 패턴은 객체 생성을 보다 유연하게 하기 위한 방법 중 하나 복잡한 기존 생성자를 별도로 실행한 뒤 조합 Builder 클래스를 이용해 각 파츠를 생성 후 조합 클래스는 Builder에 객체에 object 생성을 맡기고, 직접 수행하지 않음 한번에 모...