## 0.1 rclcpp::init 및 rclpy.init 호출 단계 전역 컨텍스트 메모리 할당 분석
ROS2 시스템 프로그래밍에서 rclcpp::init() 및 rclpy.init() 함수의 호출은 단순한 상태 플래그(Flag)의 전환이 아니라, C 기반 라이브러리인 RCL(ROS Client Library) 및 기저 네트워크 스택 체계에 요구되는 코어 메모리를 운영체제(OS)로부터 할당(Allocation)받는 중대한 시스템 전이 단계이다. 이 함수들이 호출될 때 발생하는 힙(Heap) 공간의 점유 양상과 컨텍스트(Context)의 싱글톤(Singleton) 모델 구축은 메모리 누수를 방지하기 위해 필수적으로 이해해야 할 아키텍처적 기반이다.
0.1.1 rclcpp::init 호출 시의 전역 컨텍스트 싱글톤 할당 패턴
C++ 기반의 rclcpp::init()이 호출되면 내부적으로 rclcpp::contexts::get_global_default_context() 멤버가 참조된다. 프레임워크는 이 시점에서 전역 범위의 단일 인스턴스(Singleton)인 글로벌 rclcpp::Context 객체를 힙 영역에 동적으로 메모리 할당한다. 생성된 컨텍스트 객체 내부에서는, 순수 C 계층 라이브러리인 rcl_init()이 연이어 호출되며 rcl_context_t 구조체가 초기화된다.
할당 절차는 메모리 풀 낭비를 최소화하기 위해 ROS2의 표준 메모리 할당 인터페이스인 rcutils_allocator_t 규약을 따르게 된다. 이때, 로깅(Logging) 인프라를 위한 버퍼 메모리, 보안 및 암호화 인증서 관리를 위한 SROS2 보안 컨텍스트 데이터 버퍼, 그리고 DDS 등 기저 네트워크 구동을 위한 RMW(ROS Middleware) 초기 설정 구조체가 시스템 힙(Heap) 메모리에 직렬화되어 적재된다. 이 모든 과정이 완료되어야만 프로세스 내에서 스레드 안전성(Thread Safety)을 담보하는 공유 메모리 락(Mutex Guards)이 준비된다.
0.1.2 rclpy.init 호출과 Python C-API 경계에서의 컨텍스트 포인터 바인딩
Python 구동 환경의 rclpy.init() 루틴은 근본적으로 rclcpp와 동일한 하부 C 함수(rcl_init)를 향하지만, 인터프리터 런타임의 특성에 기인하여 메모리 할당 경로에 부가적인 오버헤드가 수반된다. 함수 호출 시 rclpy는 Python C 확장 모듈을 통해 rcl_context_t C 구조체 포인터를 메모리에 먼저 할당한 뒤, 이를 Python의 캡슐화된 상태(State) 객체로 감싸는 바인딩(Binding) 과정을 수행한다.
rclpy 시스템은 Python 패러다임 상의 레퍼런스 카운팅(Reference Counting) 메커니즘이 C 레벨 힙 메모리를 임의로 해제해 버리는 상황을 막기 위해, 초기화 단계에서 생성된 모듈 레벨 전역 변수에 글로벌 컨텍스트(Global Context) 객체의 강한 참조(Strong Reference)를 고정시킨다. 이를 통해 어플리케이션이 구동되는 동안 메모리 무결성(Memory Integrity)이 보장되며, GIL(Global Interpreter Lock) 체계 하에서도 언어 독립적 코어인 RMW 및 기저 통신 시스템이 안정적으로 메모리 블록에 상주할 수 있다.
0.1.3 메모리 누수 방어 관점의 정리
명시적으로 설계된 전역 메모리 할당 모델이 의미하는 학술적 결론은, 한 프로세스에서 init() 메서드를 통해 획득한 힙 구조체의 해제 책임(Release Responsibility)이 개발자에게 귀속된다는 점이다. 할당된 rcl_context_t 메모리 덩어리와 내부 RMW 핸들러 락은 후반부 생명주기 제어 단계에서 반드시 rclcpp::shutdown() 또는 rclpy.shutdown() 루틴으로 짝을 맞추어 소멸시켜야 한다. 그렇지 않을 경우 운영체제의 고아 프로세스(Orphan Process)나 잠재적인 메모리 누수(Memory Leak) 현상으로 이어져, 극한의 환경에서 동작하는 로봇 임무 컴퓨팅 시스템의 가용률을 치명적으로 떨어뜨리게 된다.