표준 Arduino 환경이 꼬리 호출 제거를 지원하는지 궁금 해서요 ... 아무도 그것에 대해 알고 있습니까?Arduino는 테일 콜 제거를 지원합니까?
4
A
답변
0
대부분의 C 컴파일러는 테일 통화 제거를 지원하지 않습니다. (그 개념은 C 표준에 없다).
매우 최근의 일부 C 컴파일러는 매우 제한된 경우에만 강력하게 최적화 할 때만이를 지원할 수 있습니다. 특히 GCC (4.6 또는 4.7과 같은 최신 버전).
간단한 C 함수를 컴파일하고 생성 된 어셈블리를 살펴볼 수 있습니다.
1
Arduino IDE에서 테일 호출 제거가 실제로 지원되고 기본적으로 사용됩니다. 이것은 적절한 스택 프레임과 같은 디버그 에이즈가 메모리 효율성을 위해 희생되는 마이크로 컨트롤러 세계에서 매우 표준입니다. 사용 가능한 RAM 바이트 이상의 재귀 호출을 필요로 콘솔, 2048에서 0
const int RAM_SIZE_IN_BYTES = 2048;
void f(int i) {
Serial.println(i);
if(i == 0) return;
else f(i-1);
}
void setup() {
Serial.begin(9600);
f(RAM_SIZE_IN_BYTES);
}
void loop() {
}
이 코드를 인쇄 번호 :
여기 테스트입니다.
"PC에서 꼬리 전화 제거 기능을 지원합니까?" - 잘못된 구성 요소에 대해 묻고 있습니다. 특정 컴파일러에 대해 묻고 있어야합니다. –
@Damien_The_Unbeliever : 그는 아마도 암시 적으로 정확한 컴파일러를 가리키는 * 표준 Arduino 환경에 대해 묻고 있습니다. –