Box ownership

Box는 스택에 핸들을 두고 힙 데이터를 소유한다

Box<T>는 고정 크기 포인터를 스택에 저장하고, 실제 값은 힙에 배치해서 크기 문제와 큰 데이터 이동 비용을 줄입니다.

메모리 배치

stack

Box 핸들

변수 `b`는 포인터 크기만큼의 고정된 정보를 들고 있습니다.

b ptr -> heap
heap

실제 값

`Box::new(5)`가 만든 값은 힙에 저장되고 Box가 그 값을 소유합니다.

T value 5

사용 흐름

1

힙에 값 생성

`Box::new`는 값을 힙에 배치하고 스택에는 포인터를 둡니다.

Box::new(5)
2

포인터 크기만 이동

소유권을 옮겨도 큰 `T` 값은 힙의 같은 위치에 머뭅니다.

let c = b;
3

간접으로 재귀 연결

Box<List>는 직접 포함 대신 다음 값을 가리켜 무한 크기를 끊습니다.

Cons(i32, Box<List>)
4

스코프 끝에서 정리

소유한 Box가 사라지면 힙 데이터도 함께 해제됩니다.

Drop
크기 고정 재귀 타입은 포인터로 한 단계 끊어 컴파일러가 크기를 알 수 있게 합니다. 이동 비용 큰 데이터 대신 작은 포인터만 이동하므로 값 자체는 힙에 남습니다. 소유권 Box는 힙 데이터를 소유하며 스코프 종료 시 정리 책임도 함께 가집니다.