18.2.2 자동 생성된 C/C++ 메시지 구조체(`struct`)의 메모리 레이아웃 심층 분석

18.2.2 자동 생성된 C/C++ 메시지 구조체(struct)의 메모리 레이아웃 심층 분석

단순한 텍스트 파일인 .msg가 파이프라인을 거쳐 C++ 헤더 파일의 struct 로 변환되었다고 해서 모든 임무가 끝나는 것은 아니다. uORB 아키텍처가 “직렬화(Serialization) 없는 무결손 제로 카피(Zero-copy)“의 기적을 이룩하기 위해서는, 생성된 C++ 구조체가 물리적 RAM 위에서 한 치의 오차도 없이 완벽하게 예측 가능한 형태(Memory Layout)로 정렬되어 있어야만 한다.

만약 컴파일러가 최적화를 핑계로 임의의 빈 공간(Padding)을 구조체 중간에 몰래 집어넣거나, 데이터 타입의 크기가 플랫폼(x86 vs ARM)마다 달라진다면, memcpy()로 구조체를 통째로 복사하는 순간 메모리가 꼬여버리며 기체는 즉시 추락할 것이다.

따라서 PX4 메세지 생성 파이프라인은 단순히 문법을 번역하는 수준을 넘어, 컴파일러의 메모리 할당 전략을 하위 비트(Bit) 레벨까지 영악하게 통제하는 장치들을 헤더 파일 곳곳에 심어 둔다. 본 절에서는 자동 생성된 C++ 구조체 이면에 숨겨진 메모리 레이아웃 제어 기술의 심연을 들여다보며, 다음 세 가지 핵심 주제를 순차적으로 해부한다.

  1. 플랫폼 비의존성을 보장하기 위한 기본 자료형 매핑(Type Mapping) 전략 (18.2.2.1절)
  2. 컴파일러의 자의적인 데이터 패딩을 억제하는 __packed__ 지시어의 원리와 명암 (18.2.2.2절)
  3. 패딩 억제로 인해 발생하는 버스 비정렬(Unaligned Access) 페널티를 상쇄하기 위한 최적화 배치 기법 (18.2.2.3절)