GCC是否爲所有場景生成可重入代碼?gcc和可重入代碼
回答
重入是ISO C和C++可以通過設計進行的功能,因此包括GCC。編碼重入函數仍然是您的責任。
即使一個函數被正確編碼重入也不會生成可重入代碼的AC編譯器將是例外而不是規則,並且會由於架構約束(例如沒有足夠的資源來支持堆棧,因此生成靜態幀)。在這些情況下,編譯器文檔應該說明這一點。
有些文章你可能是:
不,您必須編寫可重入代碼。
不,GCC不能保證你編寫的重入代碼。
但是,在主要平臺上,編譯器生成或包含代碼(如數學內在函數或函數調用)是可重入的。由於GCC不支持那些不可重入函數調用很常見的平臺,比如8051,編譯器與重入問題幾乎沒有風險。
有GCC端口有錯誤和問題,如MSP430版本。
您的意思是說,有GCC工具鏈支持各種平臺的可重入代碼,但有一些問題? – 2010-06-13 09:10:08
重新編入並不是編譯器可以控制的任何東西 - 編程人員可以編寫重新編寫的代碼。要做到這一點,你需要避免所有明顯的缺陷,例如全局變量(包括本地靜態變量),共享資源,線程,對其他不可重入函數的調用等。 8051,默認情況下可能不會生成可重入代碼,您可能需要通過例如請求重入特定功能的代碼。一個#pragma
。
這個查詢是由於我遇到的一個信息,這個信息是爲了開發與uC/OS-II RTOS相關的應用程序而開發的,需要有一個生成可重入代碼的C編譯器。 – 2010-06-13 14:44:45
GCC至少它的大多數編譯爲(平臺,特別是如果你避免傳遞或返回結構產生可重入代碼按價值計算),但有可能某種特定語言或平臺ABI可能會另行規定。你需要更具體地說明任何更具說服力的聲明;我知道,如果正在編譯的代碼本身基本上是可重入的(當然奇怪的全局狀態技巧會讓你在任何平臺上遇到麻煩),它肯定在桌面處理器上是可重入的。
確切地說,我完全沒有使用gcc編譯x86,arm和sparc上的可重入代碼的問題。 – 2010-06-13 17:31:45
- 1. 可重入代碼混淆
- 2. 使用GCD和代碼重用:避免可重入代碼死鎖
- 3. gcc是否可以不編譯代碼?
- 4. gcc解析代碼
- 5. 可重入代碼的使用?
- 6. GCC C++和內聯彙編代碼?
- 7. 如何執行代碼和gcc
- 8. 使用gcc和SciTE編譯代碼?
- 9. 重入代碼和局部變量
- 10. 關於GCC編譯x86_64的代碼和C代碼優化
- 11. 代碼重用和重構
- 12. 編譯gcc代碼與greenhills
- 13. 用GCC編譯WIN32代碼
- 14. GCC SSE代碼優化
- 15. 可重複使用代碼
- 16. 可重複使用和可測試代碼的代碼結構Angular JS
- 17. 編譯時間障礙 - 編譯器代碼重新排序 - gcc和pthreads
- 18. 如何爲GCC代碼指定手動重定位?
- 19. URL重寫和PHP代碼
- 20. 重複jQuery代碼和adepting
- 21. 痣和重構代碼
- 22. 代碼複製和重構
- 23. 重構和代碼放置
- 24. 如何更改gcc生成的asm代碼的入口點?
- 25. 有什麼可以影響gcc構建相同的代碼?
- 26. 爲什麼gcc可以編譯C++代碼但不能鏈接?
- 27. 預處理後gcc可以輸出C代碼嗎?
- 28. 我可以使用Macports的GCC編譯通用代碼嗎?
- 29. 是否可以使用gcc編譯C++代碼?
- 30. 可可觸摸依賴注入和動態加載代碼
但是,是否有任何生成可重入代碼的gcc變體? – 2010-06-13 10:55:10