테일 콜이란 무엇입니까?
컴퓨터 프로그래밍에서 꼬리 통화는 프로그램 소스 코드 내의 특정 상황으로, 함수, 서브 루틴 또는 절차는 단순히 반환 값을 보유하는 변수를 전달하는 대신 다른 함수를 호출하여 예상 값을 반환합니다. 이름 자체는 반환 할 값을 계산하기 위해 호출 된 함수가 반환 값을 제공하기 위해 호출하는 함수의 끝 또는 꼬리에 있음을 나타냅니다. 특정 최적화 또는 컴파일러 동작으로 인해 주요 기능의 코드 위치를 저장하는 데 추가 스택 공간이 사용되지 않기 때문에 일부 프로그래머에게는 테일 콜이 관심이 있습니다. 대신 테일 함수는 원래 함수가 호출 된 호출 지점으로 직접 반환 값 보고서를 생성하는 데 사용됩니다. 재귀 통화가 매우 깊게 다 떨어질 수있는 경우 발신자 주소를 저장하는 데 사용되는 스택 공간의 양이 빠르게 다 떨어질 수 있기 때문에 테일 콜의 사용은 재귀가 사용되는 상황에서 특히 유용합니다.M 실행. 꼬리 통화를 사용하면 프로그램의 속도, 메모리 사용 및 효율성을 높이는 데 도움이 될 수 있지만 소스 코드가 특히 재귀의 경우 디버깅 및 추적하기 어려운 방식으로 호출을 사용하도록 재구성되는 상황으로 이어질 수 있습니다.
.테일 콜의 존재는 대부분의 컴퓨터 프로그램 및 시스템 아키텍처 내에서 통화 스택이 어떻게 작동하는지에 기인합니다. 플레이트 스택과 같은 스택은 최초의 마지막 데이터 구조입니다. 함수, 서브 루틴 또는 절차가 호출되면 스택 프레임이라고하는 호출 주소가 스택에 저장됩니다. 이것은 함수 A를 호출 한 다음 함수 B를 호출하는 프로그램이 함수 B 용으로 두 개의 스택 프레임이 있고 기능 B 아래에는 기능 B가 완료된 후 스택 프레임이 스택 상단에서 팝업되어 실행됩니다.Function A로 돌아가서 프레임이 완성되었을 때 프레임이 스택에서 튀어 나와서 최초의 기능이 원래 호출 된 지점으로 프로그램 제어를 반환합니다.
.테일 호출을 사용하는 경우 함수의 리턴 명령문은 다른 함수의 리턴 값을 호출 코드로 전송할 데이터로 직접 사용합니다. 위의 예에서는 기능 A가 return 문과 함께 호출 B를 직접 호출하면 꼬리 호출이 형성되었습니다. 통화 스택 내에서 두 함수 A와 B에 대한 스택 프레임이있는 대신 함수 B는 기능 A에서 리턴 주소를 받고 기능 A의 스택 프레임이 팝업되어 배치됩니다. 즉, 기능 B는 기능 B가 기능 A로 다시 전달하지 않고 기능 A를 전달하지 않고 기능 A로 직접 통과 할뿐만 아니라 기능 호출 속도를 증가시킬뿐만 아니라 스택의 양을 유지하는 데 도움이됩니다.
.꼬리 통화의 속성은 그들을 매우재귀 함수를위한 매력적인 옵션. 재귀 함수는 목록 데이터 구조를 통과 할 때와 마찬가지로 값을 계산하기 위해 반복적으로 호출하는 기능입니다. 중첩 된 기능 호출을 위해 추가 스택 프레임이 만들어지지 않으므로 스택 오버플로와 가능한 프로그램 종료의 즉각적인 위협없이 매우 깊은 레벨의 재귀를 안전하게 수행 할 수 있습니다.
.