C++ 11

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

모던 CMake 기본 가이드

모던 CMake 기본 가이드: 타겟 중심의 현대적인 빌드 시스템1. Makefile 대비 CMake의 장점크로스 플랫폼 지원Makefile은 Unix 계열 시스템에 특화되어 있지만, CMake는 Windows, Linux, macOS 등 다양한 플랫폼 지원Visual Studio, Ninja, Unix Makefiles 등 다양한 빌드 시스템 생성 가능타겟 중심의 의존성 관리명확한 의존성 전파 (PUBLIC, PRIVATE, INTERFACE)자동 헤더 의존성 추적현대적인 패키지 관리 (find_package)향상된 IDE 지원Visual Studio, CLion 등과 완벽한 통합자동 완성 및 인텔리센스 지원CMake 프리셋 지원2. 모던 CMake의 특징기존 CMake와의 주요 차이점타겟 중심 접근: ..

dev 2024.11.18