mue*_*bau 6 c++ gcc compiler-optimization
根据GCC手册,-fipa-pta优化确实:
-fipa-pta:执行过程间指针分析和过程间修改和参考分析.此选项可能导致大型编译单元的内存和编译时使用过多.默认情况下,在任何优化级别都不会启用它.
我假设GCC试图根据过程中使用的指针和引用来区分可变和不可变数据.有更深入的GCC知识的人可以解释一下是-fipa-pta做什么的吗?
我认为"过程间"这个词是关键所在.
我并不熟悉gcc的优化器,但之前我一直致力于优化编译器.以下是有点推测的; 拿一小块盐,或与知道gcc内部的人确认.
优化编译器通常仅在每个单独的函数(或子例程或过程,取决于语言)内执行分析和优化.例如,给定代码就像这个人为的例子:
double *ptr = ...;
void foo(void) {
...
*ptr = 123.456;
some_other_function();
printf("*ptr = %f\n", *ptr);
}
Run Code Online (Sandbox Code Playgroud)
优化器将无法确定*ptr调用的值是否已更改some_other_function().
如果启用了过程间分析,则优化器可以分析其行为some_other_function(),并且可能能够证明它无法修改*ptr.鉴于此类分析,它可以确定表达式*ptr仍然必须评估123.456,并且原则上它甚至可以替换printf调用puts("ptr = 123.456");.
(事实上,对于一个类似于上面代码片段的小程序,我用-O3和得到了相同的生成代码-O3 -fipa-pta,所以我可能会遗漏一些东西.)
由于典型程序包含大量功能,并且具有大量可能的呼叫序列,因此这种分析可能非常昂贵.
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |