블로그
-
C++ 스택 오버플로우 크래시: 깊은 재귀·큰 지역 배열 진단과 스택 크기 조정
깊은 재귀나 큰 지역 배열 때문에 세그폴트로 죽는 스택 오버플로우를 진단하고, 재귀를 반복문이나 명시적 스택으로 바꾸거나 데이터를 힙으로 옮기는 방법, ulimit과 링커 옵션으로 스택 크기를 조정하는 법까지 다룹니다.
-
C++ 멀티스레드 간헐적 크래시: ThreadSanitizer로 데이터 레이스 찾고 mutex·atomic으로 고치기
싱글스레드에선 멀쩡하던 코드가 멀티스레드에서 간헐적으로 죽을 때, ThreadSanitizer로 데이터 레이스를 찾아내고 mutex·lock_guard·atomic 중 무엇으로 동기화할지, 데드락과 거짓 공유는 어떻게 피할지 예제로 설명합니다.
-
C++ C 배열 vs std::array vs vector: 성능과 안전성 비교
C 스타일 배열, std::array, std::vector를 크기 고정 여부, 스택·힙 배치, 범위 검사 관점에서 비교하고, 접근·생성·순회 비용이 어디서 갈리는지 설명합니다. operator[]와 at()의 차이, 함수로 넘길 때 크기 정보가 사라지는 문제도 다룹니다.
-
C++ 커스텀 Allocator: 메모리 풀·스택·추적 할당자와 PMR
C++ STL Allocator 인터페이스로 메모리 할당을 커스터마이징하는 방법을 메모리 풀, 스택, 추적 할당자 예제와 PMR(polymorphic_allocator)로 정리합니다. 할당자 비교, 전파 정책, 정렬 함정까지 다룹니다.
-
C++ Visitor 패턴: 더블 디스패치와 std::variant + std::visit 비교
C++ Visitor 패턴을 더블 디스패치와 std::variant + std::visit 두 가지 방식으로 비교합니다. AST 순회, 상태 머신, overloaded 람다 헬퍼 등 실전 예제와 함정을 다룹니다.
-
C++ = default와 = delete: 특수 멤버 함수 제어와 복사 금지·이동 전용 타입
C++11 = default와 = delete로 특수 멤버 함수를 명시적으로 제어하는 방법을 설명합니다. 복사는 막고 이동만 허용하는 리소스 래퍼, 힙 할당 금지, 특정 타입 변환 차단, 싱글톤 예제와 Rule of Zero를 다룹니다.
-
C++ 타입 소거(Type Erasure): std::function 내부 원리와 Concept·Model 직접 구현
상속 관계가 없는 여러 타입을 하나의 인터페이스로 다루는 타입 소거 패턴을 std::function과 std::any의 내부 원리, 직접 만든 Concept·Model 구현으로 설명합니다. 콜백·플러그인·메시지 큐 예제와 가상 함수 방식과의 비용 차이도 다룹니다.
-
C++ static 멤버 변수와 함수: 초기화 순서, 스레드 안전성, C++17 inline static
C++ static 멤버 변수·함수의 동작 원리를 싱글톤, 카운터, 설정 관리자, 팩토리 실전 예제로 정리합니다. 초기화 순서 함정, 스레드 안전성, C++17 inline static까지 다룹니다.
-
C++ Rule of Five 직접 구현하기: copy-and-swap, 자기 대입, noexcept 이동 연산
동적 배열, 파일 핸들, 문자열 클래스를 직접 만들며 소멸자, 복사·이동 생성자, 복사·이동 대입 연산자를 언제 함께 정의해야 하는지 보여줍니다. 자기 대입과 예외 안전성을 copy-and-swap으로 해결하는 법, 이동 연산의 noexcept 누락 문제도 다룹니다.
-
C++ 함수 객체(펑터): 상태를 가진 호출 객체, STL 알고리즘 활용, 람다와의 차이
operator()를 오버로드한 함수 객체가 호출 사이에 상태를 유지하는 방법과 STL 알고리즘에서 쓰는 법을 설명하고, operator()의 const 누락, const를 지키면서 상태를 바꿔야 할 때의 mutable, 큰 펑터의 복사 비용을 std::ref로 줄이는 법을 예제로 다룹니다.