질문의 제목은 약간 이상 할 수 있지만 제가 아는 한 테일 콜 최적화에 반대하는 내용은 전혀 없습니다. 그러나 오픈 소스 프로젝트를 탐색하는 동안 컴파일러가 테일 호출 최적화를 수행하는 것을 적극적으로 중지하려는 몇 가지 기능 (예 : 이러한 해킹으로 가득 찬 CFRunLoopRef 구현)을 이미 발견했습니다 . 예를 들면 :
static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__() __attribute__((noinline));
static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__(CFRunLoopObserverCallBack func, CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info) {
if (func) {
func(observer, activity, info);
}
getpid(); // thwart tail-call optimization
}
이것이 왜 그렇게 중요해 보이는지 알고 싶습니다. 일반 개발자 로서도이 점을 염두에 두어야하는 경우가 있습니까? 예 : 꼬리 호출 최적화에 일반적인 함정이 있습니까?