제한 및 반포 방지
그러나 실제로 통화 깊이가 아니라 할당 될 수있는 스택 메모리의 양에는 한계가 있습니다. 런타임은 일반적으로 수백 MB로 설정된이 제한을 시행합니다. 매우 큰 재귀 호출은이 메모리를 소진 할 수 있지만, 일상적인 프로그래밍에서는 흔한 일이 아닙니다. 효율적인 솔루션은 종종 반복자 또는 테일 콜 최적화와 같은 대체 접근 방식을 포함합니다.
예제 시연
제공 한 node.js 코드와 유사합니다.
패키지 메인 "FMT"가져 오기 func run (tick int) (int) { if (tick
이 코드는 대부분의 콜 깊이에 대해 성공적으로 실행되지만 1E9 (10 억)의 재귀 깊이를 사용하려고하면 스택 오버플로가 발생하고 프로그램이 충돌합니다. 대부분의 64 비트 머신에서 1GB 스택 메모리 제한을 초과하기 때문입니다.
결론
package main import "fmt" func run(tick int) (int) { if (tick는 무한한 통화 스택을 시뮬레이션하는 융통성있는 스택을 제공하지만 스택 메모리의 양에는 여전히 실질적인 제한이 있습니다. 효율적인 코드를 홍보하려면 과도한 재귀를 피하고 복잡한 작업을위한 대체 솔루션을 탐색하는 것이 가장 좋습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3