[iOS] 배열의 Copy-On-Write - 2

유인호·2024년 4월 4일
0

iOS

목록 보기
41/64

[iOS] 배열의 Copy-On-Write - 1의 후속편

0. 실마리를 찾았음.

어제까지만 해도 arr의 예약된 크기가 선언될때 3개를 넣었다면 대충 10정도씩 할당되는 줄 알고 있었음.

그러나, 배열에 capacity라는 프로퍼티가 있다는걸 알게 되고 어제의 의문이 전부 풀리게 되었다.

1. 어제의 가설은 전부 틀렸음.

예전에는 arr1, arr2의 크기가 많다고 생각했었는데, capacity로 확인해보니 초기에 넣어준 3개와 똑같이 3의 크기만 할당이 되어 있었다.

또한, 3을 초과하게 되면 새로운 주소로 넘어가고, 기존의 2배인 6의 크기를 할당받는걸 알 수 있었다.

따라서, 배열을 복사 했을 때 CoW에 의해 참조된 것이 있으면 다른 인스턴스를 만들어 할당하는게 맞고, arr2의 주소가 변경 된 이유는 이미 할당 된 capacity를 초과해 새로운 주소로 넘어간 것이였다.

이에 증명하듯, 미리 10의 크기를 할당 받고 있었다면 arr2의 주소는 바뀌지 않는걸 확인할 수 있었다.

3. 결론

배열의 CoW를 정리하려다가 나도 모르게 배열의 성능 최적화 까지 알아보았다. capacity를 몰랐다면 아마 한참 더 오랫동안 몰랐을 것 같다.

profile
🍎Apple Developer Academy @ POSTECH 2nd, 🌱SeSAC iOS 4th

0개의 댓글