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

时间:2009-10-03 05:55:44

标签: gcc pipe compiler-options

GCC 4.1.2 documentation-pipe选项提出了这个说法:

  

-pipe

     

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

我假设我能够从错误消息中判断出我的系统的汇编程序是否支持管道,所以除了这个问题之外,何时使用该选项是否重要?决定使用它应该考虑哪些因素?

6 个答案:

答案 0 :(得分:36)

根据我们对中型项目的经验,添加-pipe在构建时间方面没有明显区别。我们遇到了一些问题(如果遇到错误,有时无法删除中间文件,IIRC),所以因为它没有获得任何东西,我们放弃使用它而不是试图解决这些问题。

答案 1 :(得分:35)

它通常没有任何区别

它有 + - 注意事项。从历史上看,同时运行编译器和汇编器会对RAM资源造成压力。

根据今天的标准,Gcc很小,-pipe增加了一些多核可访问的并行执行。

但出于同样的原因,CPU速度非常快,以至于它可以创建该临时文件并在没有您注意的情况下将其读回。由于-pipe永远不是默认模式,因此它偶尔会起作用。单个开发人员通常会报告没有注意到时差。

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

答案 2 :(得分:27)

现在试试这个,当源/构建目的地在NFS(linux网络)上时,构建起来要快得多。但内存使用率很高。如果你从未填充RAM并在NFS上拥有源代码,那么使用-pipe似乎就是胜利。

答案 3 :(得分:10)

老实说,没有理由不使用它。 -pipe只会使用更多ram,如果这个框是构建代码,我认为它有一个不错的数量。如果您的系统使用更保守的文件系统来编写然后删除所有临时文件(例如,ext3),它可以显着缩短构建时间。

答案 4 :(得分:3)

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

对于文件,编译器首先需要完成写入才能调用汇编程序。管道的另一个优点是编译器和汇编器都可以同时运行,并且它可以更多地使用SMP架构。特别是当编译器需要等待源文件中的数据时(因为阻塞I / O调用),操作系统可以为汇编程序提供完整的CPU时间,让它更快地完成工作。

答案 5 :(得分:-1)

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