我想知道標準的Arduino環境是否支持尾部呼叫消除... 有沒有人知道它的一些事情?Arduino是否支持尾部呼叫消除?
4
A
回答
0
大多數C編譯器不支持尾部呼叫消除。 (該概念不在C標準中)。
一些最近的C編譯器可能會支持它(只有在強烈優化時),在非常有限的情況下。特別是GCC(最新版本如4.6或4.7)。
您可以嘗試一個簡單的C函數並編譯它並查看生成的程序集。
1
在Arduino IDE中默認支持並啓用尾部消除。這對於微控制器領域來說是非常標準的,在這個世界中,爲了提高內存效率而犧牲了適當的堆棧幀等調試輔助手段
這是一個測試:
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() {
}
此代碼打印數量從2048到0到控制檯,這就需要更多的遞歸調用超過可用的RAM字節。
相關問題
- 1. SOAP是否支持取消呼叫?
- 2. NVCC和NVRTC是否支持尾部呼叫優化?
- 3. Clojure中的尾部呼叫消除?
- 4. 這是否被視爲尾部呼叫?
- 5. Arduino是否支持線程?
- 6. 尾部呼叫優化是否適用於遞歸調用以外的呼叫?
- 7. 尾部呼叫優化javascript
- 8. Rebol尾部呼叫優化
- 9. 什麼是一些實施尾呼叫消除的好方法?
- 10. Sip呼叫與G729支持
- 11. ECL是否支持回叫?
- 12. array_walk_recursive是否使用尾部呼叫優化?
- 13. MATLAB是否執行尾部呼叫優化?
- 14. Frege是否執行尾部呼叫優化?
- 15. jQuery AJAX呼叫 - 是否可以取消不需要的呼叫?
- 16. Arduino uno是否支持多種程序?
- 17. 爲什麼Lua不支持完整延續,儘管它支持尾部呼叫優化?
- 18. F#中的尾部呼叫優化#
- 19. lua的尾部呼叫優化
- 20. Mono/Ironpython中的尾部呼叫優化
- 21. Arduino納米:是SPI支持?
- 22. C尾呼叫優化
- 23. curl_multi_exec()是否阻塞呼叫?
- 24. 當執行時,這將是一個尾部呼叫?
- 25. 是否可以強制執行GCC/Clang上的尾部呼叫優化?
- 26. 教堂是否實施尾巴呼叫優化?
- 27. 取消ajax呼叫?
- 28. 頭部和尾部呼叫空列表帶來異常
- 29. iPhone的Xcode是否消除了尾部遞歸?
- 30. HTML5是否支持跨窗口消息?
這就像問「PC是否支持尾部呼叫消除?」 - 你問的是錯誤的組件。你應該問一個特定的編譯器。 –
@Damien_The_Unbeliever:他詢問*標準的Arduino環境*,這可能暗指一個精確的編譯器。 –