CS 13

[CS] RVO

순서RVO란?RVO의 작동방식RVO의 이점NRVORVO란?C++같은 프로그래밍 언어에서 함수가 객체를 반환할 때 발생하는 불필요한 복사 생성자 또는 이동 생성자 호출 작업을 제거하는 컴파일러 최적화 기법임.리턴할 객체를 호출자의 메모리 공간에 직접 생성해버리는 방식.RVO의 작동방식임시 객체 생성 및 복사/이동 생략컴파일러 최적화RVO의 이점성능 향상: 객체 복사 및 이동은 비용이 많이 드는 작업일 수 있는데, RVO는 이러한 작업을 생략하여 프로그램 실행 속도를 높임코드의 투명성: 개발자는 RVO를 직접 구현할 필요 없이 컴파일러에게 맡길 수 있어, 효율적인 코드를 작성하는데 집중할 수 있NRVONamed Return Value Optimization으로 함수 내에서 이름을 가진 지역 객체를 반환할 때..

CS 2025.09.05

[CS]뮤텍스와 세마포어

순서뮤텍스란?뮤텍스의 특징세마포어란?세마포어의 특징공통 개념뮤텍스와 세마포어 비교뮤텍스란?Mutual Exclusion한 번에 하나의 스레드만 접근 가능함임계영역을 보호하는 용도이다.뮤텍스의 특징1:1 접근 제어로 동시 접근이 불가함소유권 개념으로 잠근 스레드만 해제 가능함재진입 가능 여부일반 Mutex: 소유자가 아니면 재진입 불가 > 데드락 가능Recursive Mutex: 소유자가 재진입 가능세마포어란?동시 접근 가능한 스레드 수를 카운트로 관리카운트 = 1이면 뮤텍스와 동일하게 동작 > Binary Semaphore카운트 > 1이면 여러 스레드가 동시에 접근 가능 > Counting Semaphore세마포어의 특징여러 스레드 허용 가능 > 임계영역 공유 가능소유권 없음 > unlock은 다른 스레..

CS 2025.08.28

[CS]리틀 엔디안과 빅 엔디안

순서엔디안이란?LSB와 MSB리틀 엔디안이란?빅 엔디안이란?리틀 엔디안과 빅 엔디안 비교실제 사용 예엔디안이란?컴퓨터에서 메모리에 멀티바이트 데이터를 저장할 때 바이트 순서를 결정하는 방LSB와 MSBLSB: 가장 작은 단위의 비트로 값이 가장 작은 자리인 2의 0승 자리이다.MSB:가장 큰 단위의 비트로 값이 가장 큰 자리인 2의 7승 자리이다.리틀 엔디안이란?가장 작은 바이트를 먼저 저장하는 방식메모리 주소 낮은 쪽 > LSB, 높은 쪽 > MSB빅 엔디안이란?가장 큰 바이트를 먼저 저장메모리 주소 낮은쪽 > MSB, 높은 쪽 > LSB리틀 엔디안과 빅 엔디안 비교구분리틀 엔디안빅 엔디안순서LSB > MSBMSB > LSB메모리 주소 낮은 쪽가장 작은 바이트가장 큰 바이트사용 예x86 아키텍처, x8..

CS 2025.08.28

[CS]스택 오버 플로우

순서스택이란?스택 오버플로우란?스택 오버플로우 발생 원리스택 오버플로우 증상스택 오버플로우 예방 방법스택이란?함수 호출과 지역 변수 저장을 위해 프로세스 메모리 내에 할당된 영역임후입선출 구조(LIFO)를 가지고 함수 호출 시 스택 프레임을 생성하며 함수 종료 시 스택 프레임을 제거함스택 오버플로우란?스택이 가득 차서 더 이상 스택 프레임을 할당할 수 없는 상태발생하는 상황무한 재귀 호출너무 큰 지역 변수 배열 선언스택 크기를 초과하는 깊은 함수 호출스택 오버플로우 발생 원리각 함수 호출마다 스택 프레임이 추가됨스택은 운영체제에서 제한된 크기스택 프레임 누적 > 스택 한계 초과 > 스택 오버플로우스택 오버플로우 증상프로그램이 비정상 종료디버거에서 스택 트레이스 확인 가능심한 경우 시스템 레벨 오류 발생 ..

CS 2025.08.28

[CS]busy-waiting

순서busy-waiting이란?busy-waiting의 특징busy-waiting과 대기 방식 비교busy-waiting이란?스레드가 원하는 조건이 될 때까지 CPU를 계속 사용하면서 반복적으로 확인하는 상태루프 안에서 계속 기다리면서 CPU를 소모하는 대기락이 해제되기를 기다리면서 계속 반복 검사할 때 발생busy-waiting의 특징CPU 사용률 증가: 조건을 만족할 때까지 CPU를 계속 점유 => 다른 작업 방해 가능간단하지만 비효율적임: 락을 얻을 때까지 반복 확인만 하므로 CPU가 낭비됨실시간/저지연 환경에서 유용할 수 있음: 짧은 시간 안에 락이 풀릴 것이 확실할 때, 컨텍스트 스위칭 오버헤드 없이 바로 잡기 위해 사용busy-waiting과 대기방식 비교비교 방식CPU 점유컨텍스트 스위칭특징..

CS 2025.08.28

[CS]임계영역과 데드락

순서임계영역이란?데드락이란?데드락의 발생 조건임계영역이란?한 번에 하나의 스레드만 접근해야 하는 코드 영역이다.공유 자원을 여러 스레드가 동시에 수정하면 경쟁 상태가 발생할 수 있음이를 방지하기 위해 임계영역을 설정하고, 스레드가 진입할 때 락을 걸고 나올 때 해제함데드락이란?둘 이상의 스레드가 서로 상대방이 가진 자원을 기다리며 무한 대기 상태에 돌입한 것을 뜻함데드락 상태가 되면 시스템이나 프로그램 일부가 더 이상 진행하지 못함데드락의 발생 조건상호 배제: 자원은 한 번에 하나만 사용 가능점유 및 대기: 자원을 점유한 상태에서 다른 자원을 기다림비선점: 자원 강제 회수가 불가능순환 대기: 스레드가 순환 형태로 기다림요약임계영역은 공유 자원을 안전하게 다루기 위한 필수 도구데드락은 임계영역을 잘못 설계..

CS 2025.08.28

[CS] 컨텍스트 스위칭

순서컨텍스트란?컨텍스트 스위칭이란?컨텍스트 스위칭의 과정컨텍스트 스위칭 주의점컨텍스트 스위칭의 비용프로세스 vs 스레드에서의 컨텍스트 스위칭 차이C++/UE 관점레이스 컨디션컨텍스트란?프로세스나 스레드가 실행되던 상태를 말함레지스터 값프로세스 메모리 상태CPU 상태커널에서 관리하는 PCB 정보위 정보들을 저장해뒀다가 나중에 다시 불러오면 마치 중단된 지점에서 다시 이어서 실행되는 것 처럼 보이게 됨.컨텍스트 스위칭이란?CPU가 실행 중인 프로세스나 스레드의 상태를 저장하고, 다른 프로세스나 스레드의 상태로 교체하는 과정운영체제가 멀티태스킹을 지원하기 위해 필수적으로 수행하는 작업즉, 하나의 CPU에서 여러 프로그램 또는 스레드가 동시에 실행되는 것처럼 보이게 하는 핵심 기술컨텍스트 스위칭 과정실행 중인 ..

CS 2025.08.28

[CS] 캐시의 지역성

순서캐시란?캐시의 계층캐시의 지역성캐시의 지역성이 미치는 영향캐시란?CPU와 메인 메모리(RAM) 사이에 존재하는 작은 고속 메모리이다.CPU는 매우 빠르지만 메인 메모리는 상대적으로 느리기 때문에 이 속도 차이를 줄이기 위해 자주 쓰일 데이터를 캐시에 저장함.캐시는 보통 SRAM 기반으로 되어있음캐시의 계층L1캐시: 가장 빠르고 작으며 CPU 코어 가까이에 있음L2캐시: L1보다 크고 느리나 여전히 CPU 내부에 위치함L3캐시: CPU 코어 전체가 공유하고, 용량이 크며 상대적으로 느림이후에 없으면 RAM에서 가져옴즉 캐시는 CPU > L1 > L2 > L3 > RAM 순서로 데이터를 탐색함캐시의 지역성캐시의 지역성이란 캐시 성능을 높여주는 메모리 접근 패턴이다.시간 지역성: 최근에 접근한 데이터는 가..

CS 2025.08.28

[CS] 프로세스와 스레드

순서프로세스란?스레드란?프로세스와 스레드의 차이점요약프로세스란?프로세스란 운영체제가 제공하는 실행 단위로 독립적인가상 주소 공간과 자원을 갖음프로세스마다 코드, 데이터, 스택, 힙이 별도로 관리됨.스레드란?프로세스 내부에서 실행 단위로 하나의 프로세스 안에서 여러 스레드가 메모리를 공유함코드, 힙, 전역 변수를 공유하고 스택만 스레드별로 독립됨CPU가 스케줄링하여 병렬/동시 실행 가능함.프로세스와 스레드의 차이점구분프로세스스레드메모리독립적(각자 가상 주소 공간)공유(같은 프로세스 힙/글로벌)자원독립적 자원(파일, 햄들 등)공유 자원생성비용높음낮음통신IPC 필요메모리 공유로 직접 가능함C++/언리얼 활용CreateProcess/FPlatformProcess::CreateProcstd::thread, FRu..

CS 2025.08.28

[CS]프로세스의 메모리

순서프로세스란?프로세스 메모리 구조프로세스 메모리의 핵심 메커니즘프로세스 메모리의 동작프로세스란?프로세스란 프로그램이 실행되어 운영체제에 의해 관리되는 실행 단위로, 독립적인 가상 주소 공간을 가짐.프로세스가 보는 주소는 물리 메모리와 1:1이 아니라 페이지 단위로 매핑되어 있고, 이 매핑을 통해 프로세스마다 격리와 보호가 이뤄집니다.큰 흐름: 로더(또는 런타임) > 세그먼트(코드. 데이터 등) 적재 > 실행 중에 동적 할당.매핑 > 페이지 폴트/스왑/캐시 관리프로세스 메모리 구조낮은주소에서 높은주소 순으로 코드, 데이터, 힙, 스택 네 부분으로 나뉘며, 실행 중 확장/축소됨코드(code) 영역실행할 프로그램의 기계어 명령어 저장보통 읽기 전용(Read-only임)이며 실행 권한이 있음.함수 정의, 제어..

CS 2025.08.27