代码之家  ›  专栏  ›  技术社区  ›  Rob Kennedy

什么时候应该使用GCC的-pipe选项?

  •  53
  • Rob Kennedy  · 技术社区  · 16 年前

    GCC 4.1.2 documentation 这是关于 -pipe 选项:

    -烟斗

    在编译的各个阶段之间使用管道而不是临时文件进行通信。在汇编程序无法从管道中读取数据的某些系统上,这种方法不起作用;但是GNU汇编程序没有问题。

    如果我的系统的汇编程序不支持管道,我假设我能够从错误消息中分辨出来,所以除了这个问题,我是否使用这个选项什么时候重要?在决定使用它时应该考虑哪些因素?

    6 回复  |  直到 16 年前
        1
  •  46
  •   DigitalRoss    10 年前

    这通常没有什么区别

    它有 + - 考虑因素。从历史上看,同时运行编译器和汇编程序会给RAM资源带来压力。

    按照今天的标准和标准,Gcc规模较小 -pipe 添加一点多核可访问并行执行。

    但由于同样的原因,CPU速度如此之快,以至于它可以创建临时文件并将其读回,而您甚至不会注意到。自从 -烟斗 这从来不是默认模式,它偶尔会出现一些问题。单个开发人员通常会报告没有注意到时差。

    现在,有一些大型项目。您可以查看一棵树,它将构建所有Firefox、NetBSD或类似的东西,非常大的东西。包含所有X的东西,比如说,作为一个次要的子系统组件。当作业涉及成千上万个C文件中的数百万行代码时,您可能会注意到差异,也可能不会注意到差异。我相信你也知道,人们通常一次只处理一小部分这样的事情。但是,如果您是一名发布工程师,或者在构建服务器上工作,或者在 stdio.h, 你很可能想要构建整个系统,看看你是否破坏了任何东西。现在,每一点表现都很重要。。。

        2
  •  45
  •   Josh Kelley    16 年前

    根据我们在中型项目中的经验,添加 -pipe 在构建时间上没有明显的差异。我们遇到了几个问题(有时遇到错误时无法删除中间文件,IIRC),因此,由于它没有给我们带来任何好处,我们放弃使用它,而不是尝试解决这些问题。

        3
  •  32
  •   peter karasev    16 年前

        4
  •  12
  •   Jeff Mc    16 年前

    老实说,没有什么理由不使用它-管道将只使用多一点的ram,如果这个框是构建代码,我假设它的数量相当可观。如果您的系统使用的是一个更保守的文件系统,该文件系统会在编写过程中写入并删除所有临时文件(例如ext3),那么它可以显著缩短构建时间

        5
  •  7
  •   Sven    14 年前

    一个优点是,使用-pipe,编译器与文件系统的交互更少。即使是ram磁盘,当使用临时文件时,数据仍然需要通过块I/O和文件系统层,而使用管道时,数据会变得更直接。

        6
  •  0
  •   Troubadour    16 年前

    从硬件的角度来看,我想你会使用 -pipe 以保持硬盘的使用寿命。