블로그
-
string_view와 span: 복사 없이 넘기기, SSO와의 관계, mdspan, 댕글링 방지
C++ std::string_view와 std::span 정리. 복사 없이 문자열과 배열을 넘기는 방법, SSO와의 관계, mdspan, 댕글링 참조가 생기는 경우와 방지법, 성능 비교를 다룹니다.
-
C++ 인터페이스 설계와 PIMPL: 컴파일 의존성을 끊고 바이너리 호환성(ABI) 유지하기
private 멤버 하나만 바꿨는데 전체가 다시 빌드되는 문제를 PIMPL로 막는 방법을 설명합니다. 헤더 의존성이 재컴파일 범위를 넓히는 원리, Rule of Five 처리, incomplete type 에러, 이동 후 상태, PIMPL의 비용과 대안(전방 선언, Fast PIMPL)을 다룹니다.
-
time() 대신 std::chrono: duration·time_point, 클럭 선택, duration_cast, C++20 달력
C++ time() 대신 std::chrono로 정확한 시간 측정. duration, time_point, system_clock, steady_clock, duration_cast, 벤치마크·타임아웃·로그 타임스탬프까지 실전 패턴.
-
std::pmr로 메모리 할당 최적화하기 | Polymorphic Memory Resource 활용법
C++17 std::pmr의 polymorphic_allocator, monotonic_buffer_resource, pool_resource를 언제 어떻게 쓰는지, 수명·복사 시 리소스 선택·정렬 함정과 커스텀 memory_resource 구현, 측정할 때 주의할 점까지 실전 예제로 정리합니다.
-
루프가 병목일 때: 자동 벡터화, std::execution 병렬 정책, SSE·AVX2·AVX-512 인트린직
C++ SIMD와 병렬 알고리즘 정리. 루프 병목에서 출발해 std::execution 정책, 자동 벡터화 조건, SSE·AVX2·AVX-512 인트린직 사용법, 자주 나는 에러와 성능 벤치마크를 다룹니다.
-
C++ 패키지 관리 실무: vcpkg와 Conan으로 외부 라이브러리 의존성 지옥 탈출
헤더 하나 쓰려다 경로 설정에 막히는 의존성 문제를 vcpkg와 Conan으로 푸는 실무 방법을 다룹니다. vcpkg 오버레이 포트와 버전 제약, Conan 프로필·옵션·lockfile을 설명하고 CI, 멀티 플랫폼, 사내 저장소, Docker 환경에서 쓰는 패턴을 비교합니다.
-
C++ 프로젝트 CI 구성: GitHub Actions 멀티 OS·컴파일러 매트릭스, vcpkg 캐시, 테스트
로컬에선 되는데 CI에서만 실패하는 C++ 프로젝트를 위한 GitHub Actions 구성. 멀티 OS·컴파일러 매트릭스, CMake 빌드, vcpkg·Conan 캐시, 테스트 실행과 최적화 팁을 다룹니다.
-
Docker DevContainer로 C++ 빌드 환경 통일하기
C++ 빌드 환경을 Docker 이미지로 고정하는 방법입니다. 멀티 스테이지 빌드, vcpkg/Conan 의존성 캐시, VS Code Dev Container 설정, ccache·BuildKit 캐시, 컨테이너 안 GDB 디버깅과 자주 나는 런타임 에러를 다룹니다.
-
C++ 정적 분석 도구 통합: Clang-Tidy와 Cppcheck로 코드 퀄리티 강제하기
C++ 16번 디버깅의 연장선. Clang-Tidy와 Cppcheck를 CI·에디터에 통합해 버그가 발생하기 전에 코드 퀄리티를 강제하는 방법을 다룹니다. Cppcheck 프로젝트 파일, 변경 파일만 검사하는 CI, SonarQube Quality Gate로 신규 코드만 막는 레거시 도입 전략까지 정리했습니다.
-
C++ volatile의 정확한 의미: MMIO 레지스터, ISR 공유 변수, std::atomic과의 차이
C++ volatile의 의미, 메모리 맵 I/O(MMIO), 인터럽트 서비스 루틴(ISR), volatile vs std::atomic 차이, 자주 하는 실수, 프로덕션 패턴까지. 릴리스 빌드에서 사라지는 하드웨어 접근 문제 해결.