iOS에서 메모리 사이즈와 관련된 개념과 고려 사항
iOS 다바이스의 메모리 제약과 앱 메모리 제한
디바이스마다의 실제 메모리 RAM이 존재하고 앱이 실행되면 메모리를 사용하며 실행된다.
사용하려는 시스템은 메모리를 사용하다 부족하면 백그라운드에서 실행 중인 앱을 종료하거나 앱의 메모리 사용을 제한할 거 같다.
메모리 제한이라면 각 앱마다 메모리 양을 제한하여 다른 앱와 프로세스에 문제 생기는 부분을 이야기하는 거 같다.
메모리 워드(word) 크기와 데이터 정렬이 메모리 액세스 성능에 미치는 영향
메모리에서 말하는 word는 데이터를 저장하고 처리하는 기본 단위를 의미한다.
word의 크기는 컴퓨터 아키텍처에 따라 다르며 32비트 CPU에서 1word는 32비트를 의미한다.
아이폰 14 프로에 사용되는 Apple A16은 64비트 6코어 CPU로 데이터를 저장하고 처리하는 word는 64비트일 것이다.
2, 3, 4, 5로 걸쳐있는 데이터를 읽는 경우에는 2번 왕복하여 데이터를 읽어야 하는 것을 정렬이 맞지 않는 접근이라고 부른다.
현대에는 이런 부분을 하드웨어 또는 소프트웨어적으로 처리할 수 있도록 하면서 오버헤드가 발생하지만 한 번의 메모리 읽기로 처리가 가능하면서 액세스 접근 속도를 효율적으로 만든다.
포인터 크기(32비트, 64비트)에 따른 메모리 사용량 차이와 고려 사항
64비트 포인터를 사용하면 개별 포인터 변수 크기가 증가하는 만큼 전체 메모리 사용도 늘어나겠지만, 메모리 주소 공간이 넓기에 활용적으로 사용 가능할 거 같다.
iOS 앱에서 대용량 데이터를 다룰 때 메모리 사이즈를 고려한 최적화 방안
구조체 안에 포인터 변수가 많다면 메모리 사용량이 증가하기 때문에 데이터 구조의 선택에 있어서 맞게 선택해야 하는 거 같다.
자세한 부분은 Swift Performance 라는 WWDC에서 이야기하는 부분과 부합한 거 같다.
이외에도 데이터를 부분적으로 부르는 경우에 알고리즘으로 효율적으로 사용할 수 있는 거 같다.