메모리·ARC
weak 참조의 런타임 구현
"weak가 strong보다 느리다"는 말이 왜 사실인지 Swift 런타임의 참조 카운트 구조(인라인 refcount, side table)로 설명해 주세요.
면접관은 이 답을 어떻게 들을까요? 넘어갈지, 더 물어볼지, 떨어뜨릴지 알려 주고, 걸리는 문장은 콕 집어 줘요. 점수는 그대로예요.
"weak가 strong보다 느리다"는 말이 왜 사실인지 Swift 런타임의 참조 카운트 구조(인라인 refcount, side table)로 설명해 주세요.
객체 헤더의 인라인 refcount에는 strong·unowned 카운트만 있고, weak 참조가 처음 생기면 side table을 할당해 카운트를 옮긴다. 이후 weak 변수는 객체가 아니라 side table을 가리켜 한 단계 간접 참조를 거치고, 그 객체의 strong 연산까지 느려진다.