태그: ABI
8편
-
C 언어 시리즈 #04 — 함수·스택 프레임·호출 규약(ABI)과 가변 인자
System V AMD64·Windows x64 인자 레지스터·스택 슬롯·16바이트 정렬, 프레임 포인터 생략 시 디버깅·언와인드 영향, va_list 스필 순회와 가변 인자 API의 타입 안전 결여, 인라인·심볼 가시성까지 정리합니다.
-
C 언어 시리즈 #07 — 구조체·공용체·비트필드·패딩과 ABI
ABI 고정 레이아웃·offsetof·_Static_assert 검증, 패딩과 캐시 가짜 공유, union active member·effective type, 비트필드 엔디안·정렬 의존과 레지스터 맵·원격 프로토콜에 enum 직접 박지 말아야 하는 이유를 연결합니다.
-
C 언어 시리즈 #02 — 타입·승격(usual arithmetic)·정수 표현과 패딩
정수 승격·통상 산술 변환으로 size_t와 int 비교가 깨지는 이유, 고정폭 정수·엔디안, 구조체 패딩과 직렬화 시 _Static_assert 검증, FENV·부동 pragma 상호작용까지 컴파일러·ABI 관점에서 정리합니다.
-
C++ 플러그인 시스템 만들기: dlopen·LoadLibrary, C ABI 인터페이스, 핫 리로드
앱을 다시 빌드하지 않고 기능을 추가하는 C++ 플러그인 시스템을 만듭니다. dlopen·LoadLibrary 추상화, extern "C" 인터페이스로 ABI 불일치를 막는 법, 버전 체크하는 플러그인 매니저, mtime 기반 핫 리로드를 구현합니다.
-
C++ 크로스 플랫폼 빌드: MinGW·iOS·Android NDK 툴체인 파일과 CPack 패키징
C++ 크로스 플랫폼 빌드: MinGW·iOS·Android NDK용 CMake 툴체인 파일, CPack 패키징(DEB/RPM/NSIS/DMG)과 런타임 검색 경로, 심볼 버전, CI 매트릭스, 빌드·링크·패키징 에러 해결을 다룹니다.
-
C++14 초기화 캡처: move 캡처와 unique_ptr을 람다에 넘기는 패턴
C++14부터 람다의 캡처 목록에 이름 = 표현식 형태를 쓸 수 있습니다. 이를 초기화 캡처(init-capture)라고 부릅니다. 클로저 객체 안에 지정한 이름의 멤버를 만들고, 오른쪽 표현식의 결과로 초기화합니다.
-
C++ 라이브러리 ABI를 깨지 않는 법: PIMPL, extern "C" 인터페이스, 버전 관리, 검증 도구
C++ 라이브러리 ABI 호환성: 구조체 레이아웃·vtable·name mangling이 깨지는 원리, extern "C" 경계와 크기 필드를 둔 확장 구조체, 시맨틱 버전과 SONAME·심볼 버전, abi-compliance-checker·libabigail로 CI에서 ABI 변경을 잡는 방법.
-
C++ 인터페이스 설계와 PIMPL: 컴파일 의존성을 끊고 바이너리 호환성(ABI) 유지하기
private 멤버 하나만 바꿨는데 전체가 다시 빌드되는 문제를 PIMPL로 막는 방법을 설명합니다. 헤더 의존성이 재컴파일 범위를 넓히는 원리, Rule of Five 처리, incomplete type 에러, 이동 후 상태, PIMPL의 비용과 대안(전방 선언, Fast PIMPL)을 다룹니다.