옛날에 kt 에서나온 노키아폰 하나가지고있었는데
노키아 5800 이였음 앱만들려고 c++ 책보고있었는데 사람들이 얘는 일반 c++ 이랑 다르고 어렵다고 해서
좀보다가 ㄹㅇ 잘안되가지고 노키아쪽 sdk문서도 구하기도 어렵고 뭔말인지 몰라서 접었음
---
심비안OS 는 90년대에 개발됨
램도 32MB 시절이고, 2006년에 64MB , 2007년에도 램 96MB, 128MB 인 폰들이 여럿나옴
그래서 오늘 제미나이에게 물어봄
노키아의 변형 c++ 인 "카비드 C++"에서 메모리 관리가 악명 높았던 이유는
가용 메모리가 극도로 적던 시절, 메모리 누수와 시스템 크래시를 원천 차단하기 위해 표준 C++과 완전히 다른 독자적인 규칙을 강제했기 때문입니다.
변형된 심비안 C++ 문법: 표준 C++ 문법과 다르게 메모리 관리를 위한 Cleanup Stack과 같은 독자적인 개념과,
두 단계 생성자(Two-phase Constructor)를 반드시 사용해야 해서 진입 장벽이 매우 높았습니다.
복잡한 포인터 및 메모리 관리: 가비지 컬렉터가 없고 수동으로 메모리를 관리해야 하는 환경에서,
비정상 종료를 막기 위해 Leaves와 Traps라는 독자적인 예외 처리 메커니즘을 숙지해야만 했습니다.
1. 독자적인 예외 처리방법 : 리브(Leaves)
노키아의 카비드 C++은 표준 C++의 예외 처리(try-catch)가 메모리를 지나치게 많이 차지한다는 이유로
이를 금지하고, 리브(Leaves)라는 메커니즘을 사용했습니다.
리브 예외는 다음과 같은 상황에서 발생합니다.
메모리 부족 시 발생: 메모리 할당에 실패하면 시스템이 User::Leave()를 호출합니다.
실행 흐름 중단: 예외가 발생하면 함수 실행을 즉시 중단하고 호출 스택을 거슬러 올라갑니다.
고아 메모리 시 발생: 이때 함수 내부에서 동적으로 할당(New)했던 메모리들의 주소가 사라져 심각한 메모리 누수가 발생합니다.
코드가 조금만 복잡해져도 메모리 누수나 잘못된 스택 참조로 인한 크래시를 잡기가 어려웠습니다.
-----------------------------------
객체 해제 타이밍 맞추는게 복잡하고 저기 매달리게 되서 앱만들기 어려웠다네
아이폰 앱만드는 오브젝티브 c 가 훨씬 쉬웠다함
사실 매우 넓은 램만 있다면 저런 온몸 비틀기를 거의 안해도
램이 적어서 파이썬도 2.5버전까지밖에 못올렸어
@피치피(183.101) 옛날 시스템 프로그램들 보면 정말 한정된 물리 자원으로 극한의 cs를 활용해서 하는게 대단함 요즘은 그냥 메모리 개처먹는 프로그램 만들어도 널널한디
여튼 노키아폰은 앱만들기 어려워서 아이폰한테 발림
헝그리정신
@카이런프랙터 노키아 5800 쓸때 테스크앱 켜보면 os 가 64 먹었는지 가용램이 60 ~ 64 였는데 앱 8개인가 켜고 램 10 MB 남는거봄 사람들 아이폰은 멀티테스킹안된다고 깠음
@피치피(183.101) 그땐 스테이 헝그리를 빼먹어버렸었구먼
옴니아같은 윈도우 ce 는 일반 c++ 이였는데 폰 먹통 자주되고 심비안폰은 저런거 강제해서 앱땜에 폰 이상하게 꺼지는거 없었음 ㄷ 윈도우pda 들 강제재부팅하는 일명 떵침 구멍이 있었던
팩토리 패턴 어디다가 쓰나 했더니 저래서 쓸모있었네
설명보기만해도 토나오노