블로그
-
C++ 메모리 누수 심화 디버깅 | 힙 프로파일링·패턴·스마트포인터·순환참조·프로덕션
Valgrind Memcheck와 AddressSanitizer·LeakSanitizer가 무엇을 추적하는지, still reachable 같은 리포트를 어떻게 해석할지부터 unique_ptr::release, 중복 shared_ptr 생성, enable_shared_from_this 오용처럼 스마트 포인터가 숨기는 누수의 진단법을 다룹니다.
-
C++ Mixin 패턴: 템플릿 상속으로 로깅·카운팅 기능 조합하기
템플릿 매개변수로 받은 기반 클래스를 상속해 로깅·카운팅 같은 기능 조각을 필요한 클래스에만 조합하는 C++ Mixin 패턴을 다룹니다. 다중 Mixin, CRTP Mixin, 조건부 기능 선택, 메서드 체이닝을 예제로 보여 줍니다.
-
C++17·20·23 주요 기능 정리: 구조화 바인딩부터 Concepts·Ranges·std::print까지
C++17의 구조화 바인딩, if constexpr, optional, variant, filesystem부터 C++20의 Concepts, Ranges, 코루틴, 모듈, <=> 연산자, C++23의 std::print와 다차원 첨자까지 각 기능이 기존 코드의 어떤 불편을 줄이는지 예제로 비교합니다.
-
C++ 멀티스레딩 기초: std::thread·mutex·생산자-소비자와 자주 겪는 문제
std::thread 생성과 인자 전달, mutex와 lock_guard로 경쟁 조건 막기, 생산자-소비자와 스레드 풀 구현, 그리고 데드락, detach 후 댕글링 참조, false sharing처럼 멀티스레드 코드에서 자주 겪는 문제의 원인과 해결을 예제로 다룹니다.
-
C++ mutable: const 멤버 함수에서 캐시·카운터·mutex를 수정하는 경우와 남용 주의
const 멤버 함수 안에서도 캐시, 통계 카운터, mutex처럼 객체의 논리적 상태와 무관한 멤버를 수정할 수 있게 하는 mutable의 쓰임새와, const_cast와의 차이, 람다의 mutable, 남용했을 때 생기는 문제를 예제로 설명합니다.
-
C++ 이름 맹글링: _Z 심볼 읽기, nm·c++filt로 디맹글링, extern C 링크 에러
C++ 컴파일러가 오버로딩과 네임스페이스를 구분하려고 함수 이름을 _Z로 시작하는 심볼로 바꾸는 방식, nm과 c++filt로 심볼을 확인하고 디맹글링하는 방법, extern "C"로 C와 연결할 때 생기는 링크 에러 해결법을 설명합니다.
-
C++ namespace 심화: using 선언 vs 지시문, 익명 namespace, 인라인 namespace, ADL
C++ namespace의 using 선언과 지시문 차이, 익명 namespace와 파일 범위 static 비교, 별칭, 인라인 namespace를 이용한 버전 관리, ADL과 swap 관용구, 헤더에서 피해야 할 패턴과 프로젝트 구조에 맞춘 배치를 설명합니다.
-
C++ Boost.Asio io_context 이벤트 루프 | 동작 원리 정리 [#1]
Boost.Asio io_context가 미완료 작업 수를 세며 핸들러를 실행하는 방식, run()과 poll()의 차이, 작업이 없을 때 run()이 반환되는 이유와 work_guard의 역할, 단일·멀티 스레드 실행 모델과 graceful shutdown 구현을 다룹니다.
-
C++ 멀티스레드 Asio의 딜레마 | Data Race와 Mutex의 한계 [#2]
io_context 하나를 스레드 풀에서 여러 run()으로 돌릴 때 같은 세션의 핸들러가 동시에 실행되어 data race가 생기는 구조, 핸들러 안에서 mutex를 잡으면 처리량이 떨어지는 이유, 락을 잡은 채 다른 핸들러를 기다리다 빠지는 데드락을 설명합니다.
-
C++ Strand | 락(Lock) 없는 동시성 제어 [#3]
Boost.Asio Strand가 mutex 없이 핸들러를 논리적으로 직렬화하는 원리, make_strand로 strand를 만들고 bind_executor로 완료 핸들러를 묶는 방법, 연결마다 strand 하나를 두는 세션 설계와 흔한 실수를 예제로 설명합니다.