1292.89 행동 트리 노드의 메모리 할당

1. 노드 메모리 할당의 개요

행동 트리의 노드는 트리 생성 시 정적으로 할당된다. 행동 트리가 XML 또는 프로그래밍 코드로 정의되고 빌드되면, 트리에 포함된 모든 노드 객체가 메모리에 할당되며, 실행 중에 노드가 추가로 생성되거나 소멸되지 않는다. 이 정적 할당 방식은 실시간 시스템에서의 메모리 관리 예측 가능성을 보장한다 (Faconti, BehaviorTree.CPP Documentation, 2024).

2. 정적 할당의 이점

이점설명
할당 시간 예측성실행 중 동적 할당이 없으므로 할당 지연 없음
메모리 단편화 방지동적 할당/해제에 의한 단편화 미발생
메모리 사용량 예측트리 생성 시점에서 총 메모리 사용량 확정
실시간 적합성동적 할당의 비결정적 지연이 없음

3. 노드 객체의 메모리 구조

각 노드 객체는 다음의 메모리 영역을 포함한다.

영역내용할당 시점
노드 메타데이터노드 이름, 유형, 포트 정보트리 생성 시
반환 상태현재 노드 상태 (Idle/Running/Success/Failure)트리 생성 시
내부 상태 변수사용자 정의 멤버 변수트리 생성 시
자식 포인터자식 노드에 대한 참조트리 생성 시
블랙보드 참조블랙보드에 대한 포인터트리 생성 시

4. 동적 내부 자원

노드 객체 자체는 정적으로 할당되지만, 노드의 내부 로직에서 동적 자원을 사용할 수 있다. 센서 데이터 버퍼, 통신 핸들, 임시 계산 결과 등의 동적 자원은 onStart에서 할당되고, 완료 또는 halt 시 해제된다. 이러한 동적 자원의 관리는 노드 구현자의 책임이다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).

5. 노드 재사용과 메모리

행동 트리에서 동일한 행동을 여러 위치에서 사용하는 경우, 각 위치에 별도의 노드 인스턴스가 할당된다. 노드 인스턴스를 공유하지 않으므로, 각 노드가 독립적인 내부 상태를 유지할 수 있다. 서브트리(subtree) 메커니즘을 사용하면 트리 정의를 재사용하되, 실행 시에는 독립적인 인스턴스가 생성된다.

6. 로봇 공학에서의 의의

정적 메모리 할당은 로봇의 실시간 시스템에서 메모리 관련 장애를 방지한다. 동적 할당에 의한 메모리 부족, 단편화, 비결정적 지연 등의 문제가 발생하지 않으며, 시스템의 메모리 사용량을 사전에 확정할 수 있다 (Faconti, 2024).


참고 문헌

  • Colledanchise, M. & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Faconti, D. (2024). BehaviorTree.CPP Documentation. https://www.behaviortree.dev/