
C++에는 여러 데이터 집합을 담을 수 있는 방법이 여러 가지 있는데, 대표적으로 구조체(Struct)와 클래스가 있다.C++에서 struct와 class는 생각보다 많은 부분이 비슷하지만, 몇 가지 다른 부분이 존재한다.C++ 표준에서 struct와 class는 문법

C++에서 동적 메모리를 할당하는 대표적인 방법은 new 계열과 C 스타일의 malloc 계열이다.둘 다 런타임에 원하는 크기만큼 메모리를 요청하는 것이지만, 의미와 사용 목적이 다르다.컴파일이 아닌 런타임에 메모리 크기를 결정보통 heap 영역의 메모리를 할당받아 가

우리가 MyGame.exe를 실행하면, 운영체제는 이 프로그램을 위해 프로세스라는 독립된 실행 환경을 구축한다.OS는 이 프로세스에게 가상 메모리를 할당하는데, 이 가상 메모리는 크게 4개의 영역으로 나뉜다.우리가 작성한 C++ 코드가 컴파일되어 CPU가 직접 읽을 수
CPU에는 3가지 핵심 부품이 존재한다.다음 작업 지시(명령어)를 가져오고(Fetch), 그게 무슨 뜻인지 해석(Decode)한다.그리고 그 작업을 위해 어떤 기계를 돌려야 할지 지시하고 조율한다.CU의 지시를 받아 실제 작업을 수행한다.CPU가 지금 당장 사용하는 데
OOP (Object-Oriented Programming)는 객체 지향 프로그래밍의 약자로 프로그램을 객체의 모음으로 구성하는 프로그래밍 방법론이다.객체(Obejct): 프로그램을 구성하는 기본 단위로 아래 정보를 함께 가지고 있음필드/속성(field, attribu
가장 일반적이고 안전한 캐스팅 방법이다.용도:서로 관련된 타입 간의 변화 (int $\\leftrightarrow$ float, 열거형 $\\leftrightarrow$ 정수)상속 관계 내에서 업캐스팅 (파생 클래스 $\\to$ 기본 클래스)은 안전하며, 명시적 캐스팅
RTTI (Run-Time Type Information)와 RAII (Resource Acquisition Is Initialization)는 C++에서 사용되는 다른 목적을 가진 두 가지 개념이다.RTTI는 실행 시간에 객체의 실제 자료형에 대한 정보를 파악할 수
C++의 스마트 포인터는 일반적인 Raw Pointer의 단점인 메모리 누수(memory leak)와 잘못된 메모리 접근(dangling pointer) 문제를 해결하기 위해 도입된 객체 wrapper이다.스마트 포인터는 일반적인 포인터처럼 동작하지만, 객체를 소유하고
C++11 이후 가장 표준적이고 명확한 방법이다.C++11 이전 방식이며, 외부에서 복사가 불가능하지만 내부 friend 함수는 접근 가능하다.스마트 포인터(unique_ptr) 방식처럼 복사는 막고 이동만 허용하는 패턴이다.리소스를 소유하는 클래스에서 자주 사용된다.
메모리가 연속하게 배치동적 배열 기반메모리가 비연속각 노드가 포인터로 연결된 이중 연결 리스트연속된 메모리 -> 임의 접근 (Random Access) O(1)임의 접근 불가능 -> 매번 노드를 따라가야 해서 O(n)중간 삽입/삭제 시 요소를 한 칸씩 밀어내야 해서 O
std::map<Key, T, Compare = std::less<Key>, Allocator = std::allocator<std::pair<const Key, T>>>Key-Value 쌍 저장내부 요소 타입: std::pair<const
std::unordered_map은 해시 테이블 기반의 연관 컨테이너로, key–value 쌍을 저장하되 정렬은 하지 않고 빠른 평균 시간 검색을 제공하는 컨테이너이다.정의Key: 키 타입T: 값(매핑되는 값) 타입Hash: 해시 값을 계산하는 함수 객체KeyEqual
범위가 정렬되어 있지 않아도 됨앞에서부터 선형으로 비교범위가 정렬되어 있어야 함정렬된 범위에서 이분 탐색정렬이 안 되어 있으면 결과가 틀릴 수 있음O(N) (최악: 끝까지 다 봄)O(log N)찾으면 그 원소를 가리키는 iterator, 못 찾으면 end 반환찾으면 t

IPC는 서로 다른 프로세스들이 데이터와 신호를 주고받기 위한 메커니즘이다.프로세스는 메모리가 분리되어 있어서, IPC 없이는 안전하게 정보를 공유하거나 협업하기가 어렵다.프로세스 간 메모리 영역을 공유해서 사용하는 방식대량의 데이터를 다른 프로세스에게 공유할 때 유리

운영체제의 가장 본질적인 역할은 자원 관리와 보호.만약 모든 프로그램이 CPU의 모든 명령어를 실행하고 RAM의 모든 영역에 접근할 수 있다면, 하나의 프로그램에 발생한 문제가 운영체제의 핵심 데이터를 파괴하거나 다른 프로그램의 정보를 침해할 수 있음.이를 방지하기 위
가상 메모리는 프로세스마다 자기만의 연속된 메모리 공간을 가진 것처럼 보이게 OS가 만들어주는 추상화.실제로는 RAM뿐 아니라 디스크까지 포함해서, OS와 MMU가 가상 주소 -> 물리 주소를 매핑 해줌.각 프로세스는 독립적인 가상 주소 공간을 가짐어떤 프로세스든 0x

페이지 폴트는 페이징 방식을 사용한 가상 메모리 기법에서 CPU가 프로그램을 실행하면서 필요한 페이지가 물리 메모리에 없는 경우를 의미.위 사진에서 PTE의 Present bit가 0일 경우, 해당 가상 페이지가 현재 물리 메모리에 매핑되어 있지 않다라는 뜻.이 경우

CPU와 메인 메모리(RAM) 사이의 속도 차이를 줄이기 위해 CPU 내부에 위치하는 작고 빠른 임시 저장소자주 사용되는 데이터나 명령어 복사본을 저장하여 CPU가 데이터에 빠르게 접근하도록 돕고 성능을 향상시킴CPU가 필요한 데이터가 캐시에 이미 존재하는 경우캐시에서

핵심 요약런타임 동적 할당은 프레임 타임 스파이크 유발할당/해제 반복은 메모리 단편화 누적 원인대표 대응 전략은 오브젝트 풀링 적용언리얼에서는 Binned Allocator와 GC 특성 이해 필요TArray::Reserve는 재할당 비용 억제 수단동적 할당은 단순 변수

핵심 요약깊은 상속 계층은 변경 전파와 결합 증가로 취약 구조 발생 가능언리얼 권장 구조는 Actor + Component 중심 합성(Has-A) 기반 설계인터페이스는 “정체(Who)” 대신 “능력(What)” 기준 연결로 결합 완화 가능델리게이트는 이벤트 기반 통지로

std::list는 C++ 표준 라이브러리의 연결 리스트 컨테이너이다.각 노드들이 메모리에 연속적으로 붙어있지 않고, 이전/다음 노드를 가리키는 포인터로 연결되어 있다.임의 접근 불가: list\[i] 같은 인덱스 접근이 안 됨\-> 원하는 위치를 찾으려면 앞에서부터