not-tail-recursive
함수를 수행하면 ocaml은 스택을 만들고 내부에 정보를 푸시합니다. 우리가 재귀 적으로 너무 많이 호출하면 stack overflow
오류를 얻을 수 있습니다.OCaml의 함수 스택의 크기는 얼마입니까?
임계 값은 무엇입니까? 함수 스택의 크기는 얼마입니까?
not-tail-recursive
함수를 수행하면 ocaml은 스택을 만들고 내부에 정보를 푸시합니다. 우리가 재귀 적으로 너무 많이 호출하면 stack overflow
오류를 얻을 수 있습니다.OCaml의 함수 스택의 크기는 얼마입니까?
임계 값은 무엇입니까? 함수 스택의 크기는 얼마입니까?
바이트 코드 인터프리터의 경우 설명서에 기본 크기는 256k 단어라고 나와 있습니다. (wordsize는 시스템에 따라 32 또는 64 비트라고 생각합니다.) l
매개 변수를 OCAMLRUNPARAM
또는 GC 모듈을 통해 조정할 수 있습니다.
네이티브 코드의 경우 설명서에 OS의 기본 규칙이 사용되었다고 나와 있습니다. 따라서 구현마다 다를 것입니다.
나는 지금 이것을 보았다. 나는 실제로는 알 필요가 없다. 일반적으로 stacksize 제한 근처의 코드를 작성하고 싶지 않습니다.
확실히 모르겠지만 재귀 깊이는 현재 말하는 기능에 따라 다릅니다.
let rec f x = print_int x; print_char '\n'; 1 + f (x+1);;
let rec g x y z = print_int x; print_char '\n'; 1 + g (x+1) y z;;
을 그리고 f 0
RESP를 시도 : 간단하게이 두 가지 (비 꼬리 재귀) 기능을 고려한다. g 0 0 0
. 두 함수 모두 스택 오버플로를 생성하지만 후자 (g
)는 "초기"스택 오버플로를 생성합니다.
스택에 사용 가능한 특정 바이트 수가있을 수 있습니다. f
이 얼마나 멀리 있는지보고이 함수의 호출이 발생할 때 스택에 정확히 무엇이 푸시되는지 조회함으로써이 숫자를 계산할 수 있습니다.
정말 중요한가요? 왜 이걸 알고 싶니? –
아마도이 흥미로운 것을 발견 할 것입니다 : http://caml.inria.fr/mantis/view.php?id=5465 – lukstafi