문제

iPhone에서 실행되는 코드로 재귀를 피해야합니까?

아니면 다른 방법으로, iPhone의 최대 스택 크기를 알고 있습니까?

도움이 되었습니까?

해결책

예, 재귀를 피하는 것은 모든 임베디드 플랫폼에서 좋은 일입니다.

스택 오버 플로우의 가능성을 낮추거나 제거 할뿐만 아니라 종종 더 빠른 코드를 제공합니다.

재귀 알고리즘을 반복적으로 다시 작성할 수 있습니다. 그것은 항상 실용적이지는 않습니다 (QuickSort 생각). 이 문제를 해결하는 방법은 재귀 깊이가 제한되는 방식으로 알고리즘을 다시 작성하는 것입니다.

Introsort는 실제로 어떻게 수행되는지에 대한 완벽한 예입니다. QuickSort의 Log2 (요소 수)의 재귀 깊이를 제한합니다. 따라서 32 비트 머신에서는 32보다 깊은 것을 절대 다시 반복하지 않습니다.

http://en.wikipedia.org/wiki/introsort

나는 과거에 임베디드 플랫폼 (자동차 엔터테인먼트 시스템, 전화, 게임 콘솔 등)에 대해 상당히 많은 소프트웨어를 작성했으며 항상 재귀 깊이 또는 첫 번째 재귀를 피한 재귀에 상한을두고 있는지 확인했습니다. 장소.

결과적으로 내 프로그램 중 어느 것도 스택 오버 플로우로 죽지 않았으며 대부분의 프로그램은 32KB의 스택에 만족합니다. 각 스레드가 자체 스택을 얻을 때 여러 스레드가 필요하면 큰 시간을 지불합니다.

다른 팁

나는 "재귀를 사용하지 말라"고 한 두 가지 답을 봅니다. 나는 동의하지 않습니다 - iPhone이 심하게 구속 된 임베디드 시스템과는 다릅니다. 문제가 본질적으로 재귀 적이라면 자유롭게 표현하십시오.

수백 또는 수천 프레임의 스택 깊이로 되풀이되지 않으면 문제가 없습니다.

iPhone의 최대 스택 크기?

iPhone은 대부분의 운영 체제와 마찬가지로 모든 프로세스에 유효한 메모리 공간이 제공되는 수정 된 OSX를 실행합니다.

완전한 프로세서이므로 스택이 자라며 힙이 자랍니다 (또는 그 반대로 관점에 따라). 이것은 프로그램에 할당 된 메모리가 부족할 때까지 스택을 오버플로하지 않음을 의미합니다.

스택 및 성능 이유 (기능 호출은 간단한 루프에 비해 기능 호출이 비싸다는 경우) 재귀를 피하는 것이 가장 좋습니다. 어쨌든 재귀 함수에 어떤 한계를 배치 할 수 있는지 결정하고 너무 오래 갈 경우 자리를 잘라야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top