iOS Memory Deep Dive
안녕하세요. 일욜 괴물 소깡입니다. :)
오늘은 지난 세션에서 생긴 몇 가지 의문에 대해서 정리해 보도록 하겠습니다.
지난 글에서 메모리를 확인할 수 있는 방법 중 하나로 Xcode의 Memory gauage를 소개했습니다.
그런데 .. 여기서 한 가지 의문이 들었습니다.
왜 Xcode에서 앱을 실행하면 실제 앱을 실행했을 때와 메모리 사용량에 차이가 생기는걸까?
실제 앱이 동작할 때와 Xcode에서 앱을 빌드하고 실행할 때 메모리 사용량에 차이가 나는 몇 가지 이유가 있습니다:
디버그 모드 vs. 릴리스 모드
Xcode에서 앱을 빌드하고 실행할 때는 기본적으로 디버그 모드로 실행됩니다. 디버그 모드에서는 코드의 디버깅을 위한 추가 정보가 포함되어 있어 메모리 사용량이 더 많을 수 있습니다. 릴리스 모드에서는 최적화가 적용되어 더 효율적으로 메모리를 사용하므로 메모리 사용량이 더 적을 수 있습니다.
- 디버그 모드 (Debug mode)
개발자가 앱을 테스트하고 디버그 하기 위한 모드
디버그 모드에서는 변수 추적, 스택 추적 등 디버깅에 도움이 되는 추가 정보와 기능이 포함됩니다. 이 모드에서 코드가 실행되면 추가적인 검사와 오류 확인이 수행되므로 실행 속도가 느려질 수 있습니다.
또한, 코드 최적화가 제한적으로 이뤄지므로 더 많은 메모리 및 CPU 사용량이 발생할 수 있습니다.
- 릴리즈 모드 (Release mode)
실제 사용자들이 앱을 사용하는 모드
릴리즈 모드에서는 디버깅과 관련된 추가 정보를 최소화하여 코드를 최적화합니다. 이는 실행 파일의 크기를 줄이고 실행 속도를 향상시킵니다.
*디버그 모드와는 달리 릴리즈 모드에서는 오류 검사와 관련된 추가 기능이 비활성화되므로 릴리즈 모드에서 발생한 오류를 디버깅하는 데는 어려움이 있을 수 있습니다.
그러므로 코드 최적화, 디버그 정보, 코드 실행 속도 등의 차이로 메모리 사용량에 영향을 줍니다.
- 코드 최적화 : 릴리즈 모드에서 코드가 최적화되므로 실행 파일의 크기가 작아지고 메모리 사용량이 감소합니다.
- 디버그 정보 : 디버그 모드에서는 디버깅에 필요한 정보가 포함되므로 메모리 사용량이 더 많을 수 있습니다.
- 코드 실행 속도 : 릴리즈 모드에서는 코드가 최적화되어 실행 속도가 향상되므로 메모리 사용량이 줄어들 수 있습니다. 반면 디버그 모드에서는 실행 속도가 느리고 메모리 사용량이 더 많을 수 있습니다.
정리하자면)
디버그 모드와 릴리즈 모드 간의 차이는 코드 최적화와 디버그 정보의 유무에 따라 다릅니다.
이러한 차이로 인해 메모리 사용량이 변할 수 있으며, 특히 디버그 모드에서는 메모리 사용량이 더 높을 수 있습니다. 따라서 실제 앱을 출시하기 전에 릴리즈 모드에서 앱을 테스트하고 최적화하는 것이 중요합니다.
Xcode의 디버깅 도구
Xcode는 앱을 디버깅하는 데 사용되는 다양한 도구와 기능을 제공합니다. 이러한 도구와 기능은 앱의 메모리 사용량에 영향을 미칠 수 있습니다.
시스템 리소스 사용
Xcode가 앱을 빌드하고 실행하는 동안에도 시스템 자원을 사용합니다. Xcode 및 기타 백그라운드 프로세스가 동작하면서 시스템의 전반적인 메모리 사용량이 영향을 받을 수 있습니다.
그리고 이외에도 시뮬레이터로 빌드하는 경우, 실제 앱을 사용했을 때와의 환경 차이 등도 원인이 될 수 있습니다.
시뮬레이터 vs. 실제 디바이스
Xcode에서 앱을 빌드하고 실행할 때는 기본적으로 iOS 시뮬레이터를 사용하여 앱을 실행합니다. 하지만 시뮬레이터와 실제 iOS 디바이스 간에는 성능 및 메모리 관리 측면에서 차이가 있을 수 있습니다. 따라서 앱을 실제 디바이스에서 실행할 때와는 메모리 사용량이 다를 수 있습니다.
실제 환경과 테스트 환경의 차이
사용 중인 디바이스의 다양한 요인들 (예: 다른 앱의 실행, 네트워크 연결, 백그라운드 프로세스 등)은 실제 환경에서 앱의 메모리 사용량에 영향을 미칩니다. 테스트할 때는 이러한 요인들을 완벽하게 모방하기 어렵기 때문에 앱의 메모리 사용량이 다를 수 있습니다.
이러한 이유들로 인해 Xcode에서 앱을 빌드하고 실행할 때와 실제 디바이스에서 앱이 동작할 때의 메모리 사용량이 차이가 날 수 있습니다.
따라서 메모리 사용량을 평가하고 최적화하는 경우 실제 디바이스에서 앱을 테스트하고 측정하는 것이 중요합니다.
이러한 이유로 인해서 실제 앱에서 사용하는 메모리 양과 Xcode 연결 후 빌드 했을 때 사용하는 메모리 양에는 차이가 있다고 합니다 .. !
만약 실제 앱에서 메모리를 얼만큼 사용하는지 알고 싶다면 Instruments를 통해서 확인할 수 있습니다.
그 외에도 아래 글에서처럼 특정 코드를 이용해서 앱의 메모리 사용량을 확인할 수 있습니다.
다음 글에서는 메모리를 확인하는 추가적인 방법과 함께 Image에 관련된 메모리에 대해서 알아보도록 하겠습니다.