TeamCoook / iOSInterviewQuestions

✅ iOS 개발자 기술 면접 대비
18 stars 0 forks source link

[레벨 0] `3주차` 5. iOS에서 메모리 사이즈와 관련된 개념과 고려 사항에 대해 설명해주세요. #5

Open longlivedrgn opened 5 months ago

longlivedrgn commented 5 months ago
soo941226 commented 5 months ago

iOS 디바이스의 메모리 제약과 앱 메모리 제한에 대해 설명해주세요.


음... 이건 질문의 의도를 잘 모르겠네요. 저는 iOS 디바이스의 메모리 제약이라 함은, RAM의 크기를 물어보는 것 같은데요. 이게 맞다면 기기마다 상이하나 요즘 나오는 건 최소 4GB는 넘어갔던 걸로 기억합니다. 앱의 메모리 제한에 대해서는 정확히는 잘 모르겠네요. UIKit에서는 메모리가 부족하면 UIApplceationDelegate에서 applicaitonDidReceiveMemoryWarning, UIViewController에서 didReceiveMemoryWarning을 호출시켜주는 걸로 알고 있는데, 언제 호출해주는지는 모르겠습니다. 어쨌거나 해당 메소드에서 메모리 공간을 적절히 비워줄 필요가 있습니다.


메모리 워드(word) 크기와 데이터 정렬(alignment)이 메모리 액세스 성능에 미치는 영향에 대해 설명해주세요.


메모리 워드는 짧게 이야기하면 CPU가 이해할 수 있는 비트의 단위입니다. 부연설명을 조금 하면 CPU는 메인메모리와 이야기를 나누는데, 이때 버스라고 하는 물리적 통로를 이용해 이야기를 나눕니다. 이 통로의 사이즈가 CPU가 이해할 수 있는 비트의 단위이며, 또 곧 CPU가 나타낼 수 있는 메모리 주소 갯수의 기준이며, 워드입니다.

데이터 정렬과 메모리 엑세스는 잘 모르겠네요~


포인터 크기(32비트, 64비트)에 따른 메모리 사용량 차이와 고려 사항에 대해 설명해주세요.


이것도 잘 모르겠네요. Swift를 사용하면서 포인터까지 고려하면서 앱을 만드는 게 맞나 싶기도 하고요. 질문에 대한 대답은 아니라서, 일단 고민을 좀 해보면... 단순하게 생각하면 32비트가 사이즈가 작고, 32비트와 64비트 운영체제 모두에서 동작할 수 있기 때문에 동작환경이나 메모리를 효율적으로 쓰는데에 적합할 것 같고요. 다만 그만큼 메모리를 효율적으로 쓰는 코드를 개발자가 작성해야하기 때문에 상대적으로 개발시간이 많이 들 것 같습니다. 실제로 만들어보지는 않아서 가정만 해보면, 사람이 만들고자 한다면 방법이 뭔들 없겠냐만은, 아무래도 표현할 수 있는 메모리 주소에 제한이 있기 때문에 기능이나 표현에 제약이 있을 거라 짐작됩니다.


iOS 앱에서 대용량 데이터를 다룰 때 메모리 사이즈를 고려한 최적화 방안에 대해 설명해주세요.


먼저 이야기가 되는 대용량의 기준이 굉장히 중요할 것 같은데요. 데이터가 메인메모리보다 큰 경우인지 작은 경우인지에 따라 보조기억장치의 사용유무가 결정되기 때문입니다. 메인메모리보다 큰 데이터를 한번에 메인메모리에 올려서 동작시키는 건 사실상 불가능하기 때문에, 필요한 부분만 메모리에 적재하고 불필요한 부분은 내리는 걸 반복하면서 프로그램을 돌려야하겠는데요. 실제로 일반 소프트웨어 개발자가 이런 것까지 고려해가며 개발할 일은 없을 것 같고, 어렴풋한 기억이지만 iOS에서 이러한 일이 애초에 발생하지 않도록 막아놓았던 걸로 기억합니다. 일반적으로는 아무리 대용량이라고 해도 렘에는 올라가는 데이터를 다루게 될 텐데요. 일단 언어레벨에서는 되도록 힙을 많이 사용하도록 해야 많은 데이터를 운용할 수 있을 것 같고요. 구조적으로는, 디자인 패턴 중에 flyweight design pattern이라는 게 있는데요. 같은 값이 무수히 많이 반복되어 사용되는 경우, 이를 반복해서 생성하거나 메모리에 저장하는 게 아니라, 한번만 생성하고 공유하도록 유도하는 기법입니다. 이런 걸 써볼 수 있을 것 같고요. 위에서 말씀드렸던 필요한 것만 메모리에 적재하고 불필요한 건 보조기억장치에 저장을 시키고 메모리에서 내리는 기법을 또 여기서 사용해도 될 것 같네요.

qwerty3345 commented 5 months ago

iOS 디바이스의 메모리 제약과 앱 메모리 제한에 대해 설명해주세요.

메모리 워드(word) 크기와 데이터 정렬(alignment)이 메모리 액세스 성능에 미치는 영향에 대해 설명해주세요.

포인터 크기(32비트, 64비트)에 따른 메모리 사용량 차이와 고려 사항에 대해 설명해주세요.

iOS 앱에서 대용량 데이터를 다룰 때 메모리 사이즈를 고려한 최적화 방안에 대해 설명해주세요.

ohdair commented 5 months ago

블로그에 기재

longlivedrgn commented 5 months ago

iOS 디바이스의 메모리 제약과 앱 메모리 제한에 대해 설명해주세요.

참고자료: https://developer.apple.com/documentation/xcode/responding-to-low-memory-warnings

메모리 워드(word) 크기와 데이터 정렬(alignment)이 메모리 액세스 성능에 미치는 영향에 대해 설명해주세요.

포인터 크기(32비트, 64비트)에 따른 메모리 사용량 차이와 고려 사항에 대해 설명해주세요.

CPU의 포인터

32비트

64비트

iOS 앱에서 대용량 데이터를 다룰 때 메모리 사이즈를 고려한 최적화 방안에 대해 설명해주세요.