책 예제를 보면
enum List {
Cons(i32, List),
Nil,
}
let list = Cons(1, Cons(2, Cons(3, Nil)));
이렇게 재귀적으로 가면 컴파일 시점에 어느정도의 메모리를 할당해야될지 모르니까
포인터인 Box를 쓰라는건데 이해가 안가는게
포인터를 쓴다해도 결국 재귀적으로 컴파일시점에 언제끝날지 모르는데
즉, 포인터가 4byte라고 치고 할당해야하는 메모리가 4byte * x 에서 이 x 값을 컴파일타임에 모르는데 왜 box를 쓰면 해결된다는건지 이해가 안감
포인터로 하면 Stack에 할당되는 메모리는 알 수 있잔아 - dc App
아 포인터는 4byte로 치고 그 값이 고정되어있는데 박스를 안쓰면 Cons의 두번째 인자에 들어가는게 재귀니까 예상을 못한다 이 뜻인가?
스택에 들어갈때 기준으러
struct A가 있고 그 안에 a: A 멤버가 존재하면 struct A의 사이즈를 알 수 없잖아 자기 자신의 사이즈가 명확해야 멤버로 쓰던가 하지 포인터로 담으면 struct A의 사이즈는 명확해지니까 컴파일이 가능한거고
이래서 안 된다는 거 러스트 공식 가이드에 있는 내용 아닌가(
C/C++에서 struct/class 내부에 자기 자신의 struct/class 객체를 멤버로 둘 수 없는 거랑 같은 이치임
ㅇㅇ이해됫으
배열 크기 모를때 Vec 써야하는거랑 원리는 똑같음
라스트만 그런게 아니고 C같은 언어도 컴파일타임에 크기가 정해지지 않으면 에러남 포인터는 크기가 정해지니까 쓸수있는거고