针对CPU和内存使用的GCC优化

针对CPU和内存使用的GCC优化,gcc,memory,cpu-usage,compiler-optimization,Gcc,Memory,Cpu Usage,Compiler Optimization,有没有一种方法可以使用选项标志在cpu和内存方面优化GCC编译代码? 使用O3而不是01是否会增加或减少内存或cpu使用量 您可以尝试-Os,这类似于-O2(良好的CPU速度),同时尝试减小二进制大小 查看各种优化。关于内存使用: -Os减少程序的二进制大小。它对运行时内存使用的影响有限(C/C++内存分配和释放是“手动的”) 我说是有限的,因为它可以降低堆栈使用率(此优化也将使用-O2/-O3) -flto()选项也可以降低二进制大小 CPU使用率: 高度优化的代码(例如,-O3)会给C

有没有一种方法可以使用选项标志在cpu和内存方面优化GCC编译代码?
使用O3而不是01是否会增加或减少内存或cpu使用量

您可以尝试
-Os
,这类似于
-O2
(良好的CPU速度),同时尝试减小二进制大小

查看各种优化。

关于内存使用:

  • -Os
    减少程序的二进制大小。它对运行时内存使用的影响有限(C/C++内存分配和释放是“手动的”)

    我说是有限的,因为它可以降低堆栈使用率(此优化也将使用
    -O2
    /
    -O3

  • -flto
    ()选项也可以降低二进制大小

CPU使用率:

  • 高度优化的代码(例如,
    -O3
    )会给CPU带来压力,但这并不意味着CPU总功耗会更高(它可能会导致最小的执行时间)

    例如,在(与GCC无关但有趣的)中,他们发现启用各种全局速度编译器优化会导致DSP功耗显著增加(平均增加25%)。尽管这些优化增加了DSP的功耗,但运行算法时的能耗平均降低了95%

  • 配置文件引导优化可以降低CPU消耗()

  • 看看

可能您应该使用
-O2
,不要担心:如果您希望节省电源/内存,那么应用程序的整体设计将比编译器开关更有效。

上面介绍了代码大小优化

我只关注CPU优化。您可以编写处理器利用率低的非常好/优化的代码,以及最大化CPU利用率的非常差/未优化的代码

那么,如何最有效地使用处理器呢

  • 首先,使用一个好的优化编译器。我不会和GCC说话,但英特尔和其他一些购买的编译器(如PGI)在优化方面非常出色
  • 利用底层硬件,如向量指令、FMA、寄存器等
  • 遵循使用手机、wifi、gps等外围设备的最佳实践
  • 遵循软件设计的最佳实践,如延迟隐藏、使用中断避免轮询、在适当的情况下使用线程池等

  • 祝你好运。

    通常优化的代码会消耗更多的cpu(更少的时间)。你的意思是优化可执行文件的大小吗?这是编译器在内存消耗方面为您所做的唯一优化。如果您以更“节俭”的方式编写代码,那么您将有更好的机会减少代码的大小。编译器可以做的只有这么多来优化它,但它却受到了您编写代码的限制。以前有没有研究过编译器优化对%CPU和内存的影响的工作?你给我的链接很有趣,但我正在努力寻找一些与mem和cpu相关的作品。非常感谢。