태그: 최적화
20편
-
C++ 스레드 풀 직접 구현하기: 작업 큐, packaged_task로 결과 받기, 종료 시 데드락
조건 변수로 작업을 기다리는 워커 루프와 작업 큐로 C++ 스레드 풀을 직접 만들고, packaged_task와 future로 결과와 예외를 돌려받게 확장합니다. 병렬 계산·파일 처리·웹 크롤러 예제와 종료 시 데드락, 적절한 스레드 수 정하기도 다룹니다.
-
C 언어 시리즈 #03 — 제어 흐름: 분기·스위치 테이블·setjmp와 스택
분기 예측·switch 점프 테이블 휴리스틱, Duff’s device의 유지보수 비용, goto 정리 패턴과 setjmp/longjmp가 스택·VLA·비국소 점프와 충돌하는 이유를 호출 규약·C 표준 제약과 연결해 설명합니다.
-
Core Web Vitals 개선 체크리스트 | LCP·CLS 중심 실전 최적화
LCP가 느린 원인을 리소스 우선순위, 이미지, 웹폰트 순으로 점검하고, 레이아웃 이동을 막는 CLS 대책과 INP 개선 순서를 정리한 체크리스트입니다. Speculation Rules, Critical CSS, RUM 수집, CI 회귀 방지와 필드·랩 데이터 불일치 사례도 다룹니다.
-
React useMemo와 useCallback, 언제 쓰면 이득인가 | 렌더링 최적화 실전
비싼 리스트 필터링에는 useMemo, memo 처리된 자식에 넘기는 콜백에는 useCallback을 쓰는 식으로 메모이제이션이 실제 이득을 주는 조건을 코드로 구분합니다. Context 값 분리, useEffect 의존성 안정화, React Compiler와의 관계, Profiler 검증도 다룹니다.
-
Docker 멀티스테이지 빌드: 레이어 캐시 순서, BuildKit 캐시 마운트, distroless로 이미지 줄이기
빌드 스테이지와 런타임 스테이지를 나눠 Node.js·Go·Rust·Python 이미지를 가볍게 만드는 Dockerfile 작성법을 예제로 보여 줍니다. 레이어 캐시 순서, BuildKit 캐시 마운트, distroless와 Alpine 선택, COPY --from 실패와 런타임 의존성 누락 같은 문제도 다룹니다.
-
비트 연산 실전: AND·OR·XOR·시프트, 비트마스크로 플래그·권한 관리, 알고리즘 문제
AND, OR, XOR, NOT과 시프트 연산이 비트 단위로 어떻게 동작하는지 설명하고, 비트마스크로 플래그와 Unix 파일 권한을 관리하는 법을 보여줍니다. RGB 색상과 IP 주소 처리, 2의 거듭제곱 판별 같은 알고리즘 문제, 음수 시프트 함정도 다룹니다.
-
코딩 테스트에서 시간 복잡도 줄이는 체크리스트 | TLE 탈출
코딩 테스트에서 시간 초과(TLE)가 났을 때 모든 쌍을 보는 중첩 루프, 반복되는 구간 합 계산, 선형 탐색, 쿼리마다 전체 순회를 차례로 점검해 누적 합·해시·세그먼트 트리·펜윅 트리로 바꾸는 5단계 체크리스트를 제공합니다.
-
알고리즘 최적화 실전 사례 | 코딩테스트 시간 초과(TLE) 해결기
TLE 사례, Big-O 정의·증명 스케치, 상각분석, 공간-시간 트레이드오프 예제, 캐시·분기예측, 프로덕션 패턴까지 알고리즘 최적화 총정리. 코딩테스트 합격과 실무 성능 개선을 동시에 해결하는 실전 가이드.
-
C++ Small String Optimization (SSO) | string 성능 최적화 원리
std::string이 짧은 문자열은 힙 할당 없이 객체 내부 버퍼에 저장하는 Small String Optimization의 구조를 설명하고, 주소 비교와 sizeof로 SSO 여부를 확인하는 법, 생성과 복사 벤치마크, 간단한 SSO 구현 예시를 다룹니다.
-
C++ RVO와 NRVO: C++17 보장 복사 생략과 return std::move가 NRVO를 막는 경우
return 문에서 복사가 언제 생략되는지 RVO와 NRVO를 나눠 설명하고, C++17이 보장하는 복사 생략의 범위와 여러 반환 경로나 return std::move 때문에 NRVO가 깨지는 경우를 GCC로 직접 확인한 결과와 함께 보여줍니다.
-
그리디 알고리즘: 매 순간 최선을 선택하는 이유와 한계
그리디 알고리즘의 정당성 증명과 반례 찾기, 활동 선택·배낭 문제·최소 신장 트리 등 필수 유형을 실전 예제로 정리. 교환 논법(Exchange Argument)부터 프로그래머스·백준 문제까지 단계별로 학습.
-
투 포인터: O(n²) 탐색을 O(n)으로 줄이는 조건과 대표 문제
양 끝에서 좁혀 오는 방식과 같은 방향으로 함께 움직이는 방식, 두 가지 투 포인터 패턴으로 세 수의 합, 컨테이너 물 담기, 부분 배열 합 문제를 풀며 이중 루프를 O(n)으로 줄이는 조건을 설명합니다.
-
슬라이딩 윈도우로 부분 배열 문제 최적화하기
슬라이딩 윈도우는 연속 구간을 O(n)으로 다루는 기법입니다. 고정·가변 예제, 같은 방향 다중 포인터, 모노토닉 덱, 상각 분석, 관측·스트림 실무 패턴을 정리합니다. 연속 부분 배열이나 부분 문자열의 합·조건을 매번 처음부터 다시 계산하면 시간 초과가 나기 쉽습니다. 이 글에서는 윈도우를 한 칸씩 밀며 갱신하는 방식으로 복잡도를 줄이는 흐름을 단계적으로 익힐 수 있습니다.
-
C++ 성능 최적화 순서: 복사 제거, 할당 줄이기, 캐시 지역성, 컴파일러 옵션
값 전달을 참조와 move로 바꾸고, reserve와 객체 풀로 할당을 줄이고, 데이터 지역성을 살려 캐시 미스를 줄이는 순서로 C++ 코드를 빠르게 만드는 방법을 설명합니다. 컴파일 옵션, 룩업 테이블, SIMD 예제와 gprof, Callgrind, perf 사용법도 담았습니다.
-
C++ 인라인 어셈블리: GCC 확장 asm 제약 문자·clobber, MSVC 차이, 인트린식이 나은 경우
GCC/Clang 확장 asm의 출력·입력 피연산자, 제약 문자, clobber 목록을 읽고 쓰는 법과 MSVC 문법의 차이, memory clobber로 컴파일러 배리어를 만드는 원리를 CPUID·타임스탬프 카운터 예제로 설명하고, 인트린식이 더 나은 경우를 구분합니다.
-
C++ inline의 진짜 의미: 인라인 확장이 아니라 ODR 예외, inline 변수와 constexpr
inline은 호출을 펼치라는 명령이 아니라 헤더에 정의를 두어도 링크 에러가 나지 않게 하는 ODR 예외입니다. 실제 인라인 확장은 컴파일러가 결정한다는 점, 큰 함수와 재귀·가상 함수의 한계, C++17 inline 변수와 constexpr의 관계를 예제로 봅니다.
-
C++ Expression Templates: 벡터 연산의 임시 객체를 없애는 지연 평가 구현
a + b + c 같은 벡터 연산이 매 단계 임시 객체를 만드는 문제를 Expression Templates로 풀어, 연산을 식 트리로 쌓아 두었다가 대입 시점에 한 번의 루프로 평가하는 방법을 구현합니다. auto로 받았을 때의 댕글링과 앨리어싱 함정도 짚습니다.
-
C++ 메모리 정렬: Alignment·Padding과 False Sharing이 성능에 미치는 영향
C++ 구조체에 패딩이 생기는 이유와 멤버 순서로 크기를 줄이는 방법, alignas·alignof 사용법, pragma pack으로 패딩을 없앨 때의 위험, 캐시 라인 정렬로 멀티스레드 카운터의 False Sharing을 막는 방법을 다룹니다.
-
임베디드 C++ 최적화: 플래시 크기, RAM 정적 할당, 전력 소모, 실시간성(WCET)
64KB 플래시에 펌웨어가 안 들어가고, 스택이 넘치고, 배터리가 하루를 못 가는 상황을 다룹니다. LTO와 printf 제거로 플래시 줄이기, 정적 할당과 풀 allocator, 슬립 모드와 DMA, ISR 최소화와 WCET 예측을 C++ 관점에서 설명합니다.
-
C++ 알고리즘 최적화: Big-O로 병목 찾기, 공간-시간 트레이드오프, 메모이제이션
데이터가 늘자 응답이 느려질 때 Big-O로 병목을 찾고, 메모이제이션·슬라이딩 윈도우·해시 테이블로 공간을 내주고 시간을 줄이는 방법을 C++ 예제로 봅니다. Kadane, 투 포인터, partial_sort와 nth_element 비교도 포함합니다.