2014-02-21 31 views
2

我试图将很多代码塞进一个小型微控制器,同时使其速度更快。我正在编译-O3和链接时间优化,这通常是我想要的,但我发现在某些情况下,GCC正在内联函数,我知道这是一个坏主意,它确实增加了代码大小。-Winline的相反 - 如何警告未标记为内联但内联的函数

当我找到这些功能,我可以标记他们不内联 - 这很好。问题是找到它们...

那么有没有办法看到哪些函数已经内联的报告?即使这只是一个警告,如果没有“内联”关键字的功能已经被内联 - 但更重要的是的这是应该报告所有成功的内联function name, function size, times inlined, size increase/decrease

+0

这是一个不同的问题,但我已经在函数'f'的主体中使用'asm(“/ * function f * /”);'作为我可以在生成的程序集中追踪的标记。如果您找到多个实例,则表示该函数已内联。缺点是'asm'语句本身可能会阻止一个函数被内联,否则这个函数是不完美的。 –

+0

我会尝试用'-Os'标志进行编译。根据我的经验,'-Os'和'-O3'之间几乎没有性能差异;此外,由于逆向优化,有时'-O3'会生成*较慢的*代码。或者,你可以给“-finline-limit”一个镜头。 – Ali

+0

谢谢。我猜'-Os'仍然尊重显式标记为'inline'的函数?基准测试时,我发现它可能会降低5%。如果我忘记了内联重要的东西,那么看到函数GCC已经内联会很高兴。 –

回答

1

GCC 4.9的文档选项-fopt-info-optimized-inline列表,但它似乎没有工作......在我的测试中没有任何报道。