我很好奇:在進程間數據流分析期間,IR的內存管理現狀是什麼。我想知道在分析過程中完整代碼的IR駐留在內存中,或者在任何時刻應用一些內存管理技術來加載和卸載IR。 在llvm/gcc基礎架構的情況下,如何將任何分析擴展爲數百行代碼。靜態分析中的中間表示(IR)內存管理
1
A
回答
0
對於整個程序來說,保留IR是有問題的。目前的技術水平是gold linker,它負責在GCC和LLVM中實現整個程序優化。 Its early whole-program optimization design draft是我發現它是如何工作的最好的說明,但當然有很多已經自2007年以來
一般的改變,但有三個階段:
每個編譯單元編譯和優化分開成一個目標文件*。這裏的優化可以包括進程間優化,但是這些優化不會跨越編譯單元邊界。
鏈接器分析所有的目標文件併爲整個程序建立一個控制流圖。這是內存密集型的,但易於管理 - 在這裏不需要全功能代碼。然後決定鏈接器應該執行哪些轉換。
鏈接器執行步驟(2)中決定的轉換。其中每一個都是本地化的,因此只需要加載整個程序代碼的有限子集。
步驟(1)和(3)由許多可以並行執行的任務組成。
*在編譯器IR上使用常規對象文件時,可以實現更好的優化。在GCC中,它通過在目標文件中嵌入IR來工作;在LLVM中,它僅通過將LLVM IR文件作爲目標文件提供給鏈接器來工作。在這兩種情況下,這都是通過使用插件連接器來實現的。
相關問題
- 1. Monotouch中的靜態和內存管理
- 2. 分析內存管理
- 3. 靜態類的內存管理
- 4. iOS內存管理:ivars,靜態和NSStrings
- 5. 內存管理和靜態CoreFoundation變量
- 6. 內存管理與靜態對象
- 7. 靜態分析器 - 內存泄漏
- 8. 分配內存分析器和任務管理器之間的內存差異
- 9. Objective-C靜態庫中的內存管理
- 10. 內存管理如何在c#中的靜態通用列表中工作?
- 11. 靜態存儲器管理
- 12. 動態分配 - 內存管理
- 13. 動態分配2D空間的內存管理
- 14. C中的內存管理(分配)
- 15. 圖像顯示中的內存管理
- 16. 「分析器圖」中的「非託管內存」。這是內存泄漏指示嗎?
- 17. .NET構建管道中的靜態代碼分析
- 18. 管理WCF中的靜態數據
- 19. H2O中的內存管理
- 20. perl中的內存管理
- 21. ARC中的內存管理
- 22. C++中的內存管理。
- 23. PhoneGap中的內存管理
- 24. AngularJS中的內存管理
- 25. Swift中的內存管理
- 26. GUI中的內存管理
- 27. Javascript中的內存管理
- 28. java中的內存管理
- 29. iOS中的內存管理
- 30. .NET中的內存管理
謝謝你的回答。根據我所研究的關於該主題的最新技術狀態,通過聚類和分區可創建至少一百萬行代碼的調用圖。問題仍然沒有得到解決,那麼是否仍然需要一個框架,可以通過IR的prpoer管理算法執行更復雜的過程間數據流分析,或者在文獻中存在這樣的信息。 – user3382041