블로그
-
C++20 constexpr 컨테이너와 알고리즘: constexpr vector·string·new/delete의 규칙과 한계
C++20에서 constexpr로 쓸 수 있게 된 std::vector·std::string·표준 알고리즘과 constexpr new/delete를 예제로 설명합니다. 할당이 상수 평가 밖으로 나갈 수 없는 규칙, 결과를 std::array로 옮기는 방법, 자주 나는 컴파일 에러와 컴파일러별 지원 버전을 다룹니다.
-
SFINAE 패턴 정리: enable_if, void_t, Detection Idiom과 Concepts로 옮길 시점
C++ SFINAE 정리. enable_if, void_t와 표현식 검사, Detection Idiom과 is_detected, 템플릿 오버로드 분기, 레거시 SFINAE 코드를 C++20 Concepts로 옮기는 기준을 다룹니다.
-
GDB로 C++ 디버깅하기: 브레이크포인트, 워치포인트, backtrace, Core Dump 분석
GDB로 C++ 프로그램을 디버깅하는 방법. 디버그 빌드, 조건부 브레이크포인트, 워치포인트, backtrace와 변수 검사, step/next/continue, Core Dump 분석과 역방향 디버깅을 예제로 다룹니다.
-
macOS에서 LLDB로 C++ 디버깅하기: 브레이크포인트, 워치포인트, frame variable, GDB 명령 대응표
macOS에서 LLDB로 C++를 디버깅하는 방법. 디버거 권한과 코드 서명(Developer Mode, get-task-allow, SIP), frame variable과 expression의 차이, 조건부 브레이크포인트·워치포인트·backtrace, dSYM, GDB 명령어 대응표를 정리합니다.
-
C++ 전처리기 제대로 쓰기: #define과 #ifdef 실전 패턴
redefinition 에러, Windows와 Linux API 분기, 디버그 빌드 전용 로그, __FILE__과 __LINE__을 넣은 assert처럼 전처리기가 필요한 상황을 예제로 풀고, 가변 인자 매크로와 확장 순서, 인자에 쉼표가 든 매크로의 함정을 설명합니다.
-
Valgrind Memcheck로 C++ 메모리 누수 찾아내기
C++ Valgrind Memcheck로 메모리 누수·힙 버퍼 오버런·초기화 안 된 값을 찾는 방법. definitely lost·invalid read/write·uninitialised value 출력 해석, suppression 파일 작성, CI 통합까지 예제로 설명합니다.
-
C++ 고급 멀티스레딩 | 스레드 풀·Work Stealing
C++ 스레드 풀, Work Stealing, Lock-Free 큐, 메모리 순서, Thread-Local Storage를 직접 구현하며 각 패턴이 해결하는 문제와 흔한 버그(작업 유실, ABA, lost wakeup, TLS 잔여 상태)를 설명합니다.
-
C++ 참조: lvalue·rvalue·const 참조, 참조 vs 포인터, 참조 축약 규칙
C++ 참조 정리. 큰 객체를 복사 없이 넘기는 문제에서 출발해 lvalue 참조, rvalue 참조, const 참조, 참조와 포인터의 차이, 참조 축약 규칙과 자주 나는 에러를 예제로 다룹니다.
-
C++ 메모리 풀 구현 비교: 객체 풀, 슬랩 할당자, 아레나, std::pmr
프로파일러에서 malloc이 상위에 뜨거나 힙 단편화·락 경합이 생길 때 쓸 수 있는 객체 풀, 슬랩 할당자, 메모리 아레나, std::pmr을 직접 구현하며 비교합니다. 풀보다 오래 사는 객체, 잘못된 풀 반환, pmr 리소스 수명 같은 실수도 짚습니다.
-
C++ Lock-Free 자료구조: CAS로 스택·큐 만들기, 메모리 순서, ABA 문제와 Hazard Pointer
C++ Lock-Free 프로그래밍 정리. 원자 연산과 CAS, Lock-Free 스택과 큐 구현, memory_order 선택, ABA 문제와 Hazard Pointer 해법, 자주 나는 에러와 락 기반 대비 성능을 다룹니다.