포인터 흑마법
SWC 관련해서 최적화 목적으로 포인터 흑마법을 쓸 일이 생겼다. 근데 난 흑마법은 개뿔이고 포인터도 모른다. 포인터도 모르면서 컴파일러를 만들었다고하면 좀 이상하겠지만... 진짜 모른다.
그래서 (필요한만큼만) 공부하기로 했다. 일단 내가 하고 싶은 건
enum Atom {
Inlined([u8; 7])
Static(&'static str),
Arc(Arc<str>),
}
이다.
그리고 Arc
의 경우 인터닝이 가능해야한다.
여기까진 쉬운데... 사이즈가 8바이트면 좋겠어서 방법을 찾아봤다.
포인터의 64비트를 다 쓰는 게 아니니까 남는 비트로 어떻게 할 수 있지 않을까 싶었다.
근데 러스트 디스코드에서 질문하고 답변받은 게 &'static str
이 16바이트라는 것이다.
아...
결론은 저런 API는 불가능하다는 것... 그리고 찾아보니까 48비트만 쓰는 것도 현재 구현 디테일이고 64비트까지 확장할 수 있다고 하더라.
이 문제는 좀 고민을 해봐야 할 것 같다