Advanced Swift

swift string은 Stack, Heap 둘중 어디에 저장될까?

studying develop 2022. 12. 19. 23:44

정답은 heap이다...

 

그런데 string은 value 타입임.

 

즉 swift에서 저장 공간과 value, reference 타입은 관계가 없다. 즉 value 타입이라고 항상 스택에 저장되는게 아니다.

하지만 string은 짧은 문자열은 스택에 저장되기도 한다 함(16바이트 이하)...?

 

string이 heap에 저장되는 이유에 대해 알아보자.

 

array, dictionay, set, string(collection of char)과 같이 가변 길이의 Collection들은 내부 데이터를 힙에 저장한다.

컴파일 타임에 그 사이즈를 정확히 알기 어려워 heap에 할당 후 사이즈를 조절한다.

 

주로 스택에 저장되는 경우는 변수의 생명주기가 static한 경우고, value type의 사이즈가 컴파일 타임에 저장되어 스택의 영역을 얼마만큼 차지할지 미리 알게되면, 스택으로 저장한다. 반대로 말하면 스택은 dynamic한 생명주기랑 관련 없고 (scope에 관련없는 생명주기), 사이즈가 런타임에 변하는 경우는 스택과 상관없다.

 

일단 큰 원리는 이런데, swift가 힙에 저장되도 스택 옵티마이제이션을 한다해서, 정확히 어떻게 되는건지는 아직 잘 파악이 안된다...

 

스위프트 메모리 구조 - memory architecture (https://swiftrocks.com/memory-management-and-performance-of-value-types)

 

 


참조.

https://developer.apple.com/videos/play/wwdc2016/416/

https://sujinnaljin.medium.com/ios-swift%EC%9D%98-type%EA%B3%BC-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%A0%80%EC%9E%A5-%EA%B3%B5%EA%B0%84-25555c69ccff