얼랑의 프로세스에 대한 루프를 만드는 일반적인 방법은 재귀를 사용하는 것입니다 루프? 다음 재귀 호출에서 가비지 수집됩니까? 새로운 변수를 선언하지 않아도 루프가 문제가되지 않으며 스택 오버 플로우가 발생할 수 있습니다. 한 루프에서 다른 루프로 끝없는 포인터를 얻을 수 있기 때문에 이론적으로는 어느 시점에서 다시 돌아 가야 할 수도 있습니다 ?얼랑 루핑 및 메모리 할당
3
A
답변
3
기술적으로 지역 변수는 Erlang에서 선언되지 않습니다. 그들은 가치에 묶여 있습니다. 지역 변수의 값은 스택에 저장됩니다. 일부 데이터 유형은 스택에 직접 저장 될 수 있으므로 힙에 할당 할 필요가 없습니다. 따라서 지역 변수는 가비지 컬렉션 될 필요는 없지만 일부 데이터 유형의 값은 있어야합니다. 어쨌든 이러한 값은 다음 재귀 호출에서 가비지 수집되지 않지만 힙이 스택을 충족하면 힙이 가득 찼으며 가비지 수집이 트리거됨을 의미합니다.
가장 중요한 점은 설명 된 방식으로 함수를 작성하면 재귀 호출 및 매개 변수가 "레지스터"에 저장되기 전에 스택 프레임이 해제된다는 것입니다. 다음 재귀 호출은 함수 호출이 아니라 점프 만합니다. 스택이 늘어나지 않는다는 뜻입니다. 힙에 할당되고 더 이상 스택이나 함수 매개 변수에 의해 참조되지 않는 모든 값은 가비지 수집 될 수 있으므로 메모리 누수 또는 스택 오버플로가 발생하지 않습니다. 사실, 그것은 매우 간단하고 우아한 솔루션입니다.
관련 문제
- 1. cv :: mat 메모리 할당 및 해제 메모리
- 2. 메모리 할당 및 해제 메모리
- 3. 메모리 할당 및 해제
- 4. 템플릿 및 메모리 할당
- 5. 메모리 할당 및 구조화
- 6. Ptrace 및 메모리 할당
- 7. 메모리 할당 및 재설정
- 8. 루핑 및 텍스트 상자에 결과 할당
- 9. 스택 메모리 할당 및 할당 해제 메커니즘
- 10. C# 메모리 할당 및 할당 해제 패턴
- 11. PHP 메모리 할당 및 할당 해제
- 12. 할당 취소 및 메모리 할당 문제가
- 13. C++에서 메모리 할당 및 할당 해제
- 14. 동적 메모리 할당 및 메모리 누수
- 15. 메모리 할당
- 16. 객체 할당 및 메모리 경고
- 17. 정적 메모리 할당 및 이식성
- 18. 선언/초기화 및 메모리 할당
- 19. 할당 및 스택 메모리 처리
- 20. 포인터 및 메모리 할당 구분
- 21. UIScrollView 메모리 할당 및 릴리스
- 22. 동적 메모리 할당 및 sprintf
- 23. 메모리 할당 및 ** argv 인수
- 24. 메모리 할당, 스택 및 힙
- 25. 벡터 할당 및 메모리 사용
- 26. 복사 생성자 및 메모리 할당
- 27. 유형 및 메모리 할당 크기
- 28. 클래스에서 메모리 할당 및 삭제
- 29. 메모리 할당?
- 30. 메모리 할당