我很好奇:在进程间数据流分析期间,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