태그: 성능최적화
10편
-
C++ REST API 성능 최적화 예제: perf로 병목 찾고 해시맵 인덱스·참조 반환으로 응답 시간 줄이기
사용자 목록을 반환하는 C++ REST API를 예로 들어, 벤치마크 기준선을 잡고 perf로 핫스팟을 찾은 뒤 요청마다 전체를 훑던 탐색을 해시맵 인덱스로 바꾸고, User 복사를 참조 반환으로 없애고, JSON 직렬화를 정리하는 과정을 연산 횟수 기준으로 설명합니다. 요청 안에서의 병렬화가 왜 위험한지도 다룹니다.
-
C++ use-after-move 버그: std::move가 캐스팅일 뿐인 이유와 이동 의미론 실수 10가지
std::move는 캐스팅일 뿐이라는 사실에서 출발해 이동된 객체를 다시 쓰는 use-after-move 버그, const 객체 이동, return에 std::move를 붙여 RVO를 막는 실수 등 이동 의미론 에러 10가지와 고치는 방법을 다룹니다.
-
C++ vector reserve vs resize: capacity와 size의 차이와 쓰임
vector의 reserve는 capacity만 늘리고 size는 그대로 두지만, resize는 요소를 실제로 만들고 초기화해 size를 바꿉니다. 이 차이 때문에 reserve 뒤 인덱스로 접근하거나 resize 뒤 push_back을 하면 생기는 버그와 재할당 횟수 차이를 예제로 보여 줍니다.
-
C++ emplace_back vs push_back: 실제 성능 차이와 언제 다른지
emplace_back은 인자를 받아 컨테이너 안에서 바로 객체를 생성하고, push_back은 이미 만든 객체를 복사하거나 이동합니다. 단순 타입과 복잡한 객체 벤치마크로 실제 차이가 언제 생기는지 확인하고, map·set에서의 emplace 사용도 다룹니다.
-
C++ string vs string_view: 복사 없는 문자열 처리와 선택 기준
읽기 전용 문자열을 인자로 받을 때 std::string_view가 복사와 할당을 어떻게 줄이는지, 소유와 수정이 필요할 때는 왜 std::string이어야 하는지 비교합니다. 부분 문자열, 파싱, 로깅 예제와 함께 마이크로벤치마크를 읽을 때의 함정도 짚습니다.
-
C++ Lock-Free 자료구조: CAS로 스택·큐 만들기, 메모리 순서, ABA 문제와 Hazard Pointer
C++ Lock-Free 프로그래밍 정리. 원자 연산과 CAS, Lock-Free 스택과 큐 구현, memory_order 선택, ABA 문제와 Hazard Pointer 해법, 자주 나는 에러와 락 기반 대비 성능을 다룹니다.
-
C++ 성능 최적화 순서: 복사 제거, 할당 줄이기, 캐시 지역성, 컴파일러 옵션
값 전달을 참조와 move로 바꾸고, reserve와 객체 풀로 할당을 줄이고, 데이터 지역성을 살려 캐시 미스를 줄이는 순서로 C++ 코드를 빠르게 만드는 방법을 설명합니다. 컴파일 옵션, 룩업 테이블, SIMD 예제와 gprof, Callgrind, perf 사용법도 담았습니다.
-
C++17 스레드 풀 만들기: 작업 큐, future 반환, 우선순위·취소, 요청마다 스레드를 만들 때의 문제
요청마다 std::thread를 만들다 스레드가 1000개로 불어난 상황에서 출발해 C++17 스레드 풀을 작업 큐, future 반환 submit, 우선순위, graceful shutdown 순서로 구현합니다. 참조 캡처 use-after-free, 중첩 submit 데드락, 백프레셔 부재도 다룹니다.
-
C++ 프로파일링: perf·Tracy·VTune 도구 비교와 병목 찾는 절차
추측으로 최적화하다 시간을 날리지 않도록 std::chrono 측정에서 시작해 perf, gprof, Callgrind, Tracy, VTune 같은 도구로 핫스팟을 찾는 절차를 보여줍니다. Flame Graph 생성, 측정과 재측정을 반복하는 흐름, 벤치마크할 때 빠지기 쉬운 함정도 다룹니다.
-
C++ 캐시 친화 코드: AoS vs SoA, 데이터 지향 설계, False Sharing
C++ 캐시 친화 코드 작성법을 정리합니다. 행 우선 순회, 구조체 패딩과 핫/콜드 분리, AoS vs SoA가 실제로 이득인 경우, false sharing과 Apple Silicon의 128바이트 캐시 라인, 소프트웨어 프리페치, perf stat·perf c2c로 측정하는 법까지 다룹니다.