C++ 12

락프리(Lock-Free) 알고리즘 이해하기

멀티스레드 프로그래밍 환경에서 동시성 제어는 성능과 직결되는 매우 중요한 문제입니다. 이번 글에서는 전통적인 락 기반 동시성 제어의 한계를 극복하기 위해 등장한 락프리(Lock-Free) 알고리즘에 대해 알아보고, 그 개념과 구현 방법, 그리고 장단점을 살펴보겠습니다.락프리 알고리즘이란?락프리(Lock-Free)는 이름 그대로 "자물쇠(Lock) 없이" 여러 스레드가 동시에 데이터를 처리하는 기술입니다.쉽게 비유하자면 회전문과 같습니다.락(Lock): 한 번에 한 명만 들어갈 수 있는 화장실입니다. 누군가 안에 있으면 밖에서 열쇠를 받을 때까지 마냥 기다려야 합니다.락프리(Lock-Free): 여러 사람이 동시에 지나갈 수 있는 회전문입니다. 가끔 문이 꽉 차서 한 바퀴 더 돌아야 할 수도 있지만, 멈추..

dev 2025.12.08

C++ std::format, std::print 사용법과 컴파일러 호환성

C++20 std::format과 C++23 std::print: 현대적인 문자열 포매팅C++20과 C++23은 문자열 포매팅을 현대화한 std::format과 std::print를 도입하며, 기존의 printf나 std::cout에 비해 안전하고 직관적인 API를 제공합니다. 이 글에서는 두 기능의 사용법, 컴파일러 호환성, 그리고 지원되지 않는 환경에서 fmt 라이브러리 사용 방법을 다룹니다.왜 새로운 포매팅 API가 중요한가?기존 C++ 문자열 포매팅 방법(printf, std::stringstream, std::cout)은 다음과 같은 단점이 있습니다:안전성 부족: printf는 타입 안정성을 보장하지 않아 런타임 오류 발생 가능.복잡성: std::stringstream은 장황하고 성능 오버헤드 ..

dev 2025.05.23

C++ 언어의 ABI 이슈 및 호환성 가이드

C++ 언어의 ABI 이슈 및 호환성 가이드1. ABI란 무엇인가?ABI(Application Binary Interface)는 컴파일된 바이너리 코드(오브젝트 파일, 라이브러리, 실행 파일 등)가 서로 상호작용할 수 있도록 정의된 규칙입니다. C++에서는 이름 맹글링, 호출 규약, 객체 레이아웃, 예외 처리 등이 포함됩니다. C++의 복잡한 기능(클래스, 템플릿, 예외 처리 등)으로 인해 ABI 이슈는 특히 중요하며, 서로 다른 컴파일러나 환경 간 호환성 문제를 자주 일으킵니다.2. C++ ABI의 주요 이슈C++는 언어의 복잡성으로 인해 다양한 ABI 이슈가 발생합니다. 아래는 주요 이슈와 구체적인 예입니다.2.1 컴파일러 간 ABI 비호환성문제: GCC, Clang, MSVC와 같은 컴파일러는 이름..

dev 2025.05.20

C++ 메모리 할당기 - tcmalloc, jemalloc

멀티스레드 최적화 힙 메모리 할당기: tcmalloc, jemalloc이글 UPDATE : https://cdecl.tistory.com/304왜 멀티스레드 메모리 할당기가 중요한가?기본 메모리 할당기(glibc의 malloc, Windows의 HeapAlloc)는 범용성을 목표로 설계되었지만, 멀티스레드 환경에서는 다음과 같은 문제로 성능이 저하됩니다:락 경합(Lock Contention): 다중 스레드가 동시에 메모리를 할당/해제할 때 락으로 인한 대기 시간 증가.메모리 단편화(Memory Fragmentation): 빈번한 할당/해제로 메모리 사용 효율 저하.ABI 호환성 문제: 서로 다른 컴파일러나 표준 라이브러리 간 메모리 관리 방식 차이로 인한 런타임 오류.tcmalloc, jemalloc, ..

dev 2025.05.19

C++ REST SDK(cpprestsdk) Sample

Introductionhttps://github.com/Microsoft/cpprestsdkMicrosoft에서 만든 클라이언트, 서버용 C++ HTTP 통신 모듈이며, JSON URI, 비동기, 웹소켓, oAuth 등을 지원 C++11의 비동기, 병렬 프로그램 모델 지원크로스 플랫폼 지원 등..cpprestsdk package install (w/ vcpkg)https://github.com/microsoft/vcpkgvcpkg 통해서 패키지 설치 # --triplet=x64-windows-static$ vcpkg.exe install cpprestsdk:x64-windows-static...The package cpprestsdk:x64-windows-static provides CMake targe..

dev 2025.05.19

Httplib (cpp-httplib) Sample

Introductionhttps://github.com/yhirose/cpp-httplibA C++11 single-file header-only cross platform HTTP/HTTPS library. This is a multi-threaded 'blocking' HTTP libraryheader-only 라이브러리로 Server와 Client Http 지원 SSL을 위한 OpenSSL 필요cpprestsdk비해 가볍고, 쉽게 사용 가능 Httplib package install (w/ vcpkg)https://github.com/microsoft/vcpkgvcpkg 통해서 패키지 설치 header-only로 바로 사용가능하나 OpenSSL 필요시 패키지 설치가 용이# --triplet=x64..

dev 2025.05.18

C++20 Modules - gnu c++ test

C++ Modules Test Example (g++)C++20 ModulesC++20에 추가된 모듈 Modules 기능은 기존의 헤더 파일 #include로 인한 컴파일 시간 증가 문제를 해결하고, 필요한 로직(함수, 심볼)만을 내보내는(export) 방식을 통해 타 언어의 모듈 단위처럼 효율적인 라이브러리 관리를 지원합니다.Modules의 주요 장점컴파일 시간 단축: 각 모듈은 한 번만 컴파일되며, 그 결과가 캐시됨심볼 격리: 모듈 내부의 심볼은 명시적으로 export하지 않는 한 외부에서 접근 불가순환 의존성 방지: 헤더 파일과 달리 명확한 의존성 그래프 형성매크로 독립성: 모듈은 매크로의 영향을 받지 않아 더 안정적인 코드 작성 가능일종의 PCH(Precompiled Header)의 기능을 포함한..

dev 2024.11.24