Rob*_*edy 56 gcc pipe compiler-options
在GCC 4.1.2的文件有这样说的-pipe选项:
-管
使用管道而不是临时文件进行编译的各个阶段之间的通信.这无法在汇编程序无法从管道读取的某些系统上运行; 但GNU汇编程序没有问题.
我假设我能够从错误消息中判断我的系统的汇编程序是否不支持管道,所以除了这个问题,我何时使用该选项才有意义?决定使用它应该考虑哪些因素?
Jos*_*ley 37
根据我们对中型项目的经验,添加-pipe在构建时间方面没有明显区别.我们遇到了一些问题(如果遇到错误,有时无法删除中间文件,IIRC),所以因为它没有获得任何东西,我们放弃使用它而不是试图解决这些问题.
Dig*_*oss 36
它有+和-考虑因素.从历史上看,同时运行编译器和汇编器会给RAM资源带来压力.
根据今天的标准,Gcc很小,并且-pipe增加了一些多核可访问的并行执行.
但出于同样的原因,CPU速度非常快,以至于它可以创建该临时文件并在没有您注意的情况下将其读回.而且由于-pipe从来不是默认模式,它偶尔会起作用.单个开发人员通常会报告没有注意到时差.
现在,有一些大型项目.你可以查看一个构建所有Firefox或NetBSD的树,或者类似的东西.包含所有X的东西,比方说,作为次要的子系统组件.当作业涉及数千和数千个C文件中的数百万行代码时,您可能会或可能不会注意到差异.我相信你知道,人们通常只会同时处理这类事情的一小部分.但是,如果您是发布工程师或在构建服务器上工作,或者在stdio.h中更改某些内容,您可能希望构建整个系统以查看是否有任何损坏.而现在,每一次性能下降都可能......
pet*_*sev 27
现在试试这个,当源/构建目的地在NFS(Linux网络)上时,构建起来要快得多.但内存使用率很高.如果您从未填充RAM并在NFS上拥有源代码,那么使用-pipe似乎是一场胜利.
Jef*_* Mc 10
老实说,没有理由不使用它.-pipe只会使用更多ram,如果这个框是构建代码,我认为它有一个不错的数量.如果您的系统使用更保守的文件系统来编写然后删除所有临时文件(例如,ext3),它可以显着缩短构建时间.
小智 7
一个优点是使用 -pipe 将编译器与文件系统的交互更少。即使是 ram 磁盘,在使用临时文件时,数据仍然需要通过块 I/O 和文件系统层,而使用管道则变得更加直接。
对于文件,编译器首先需要完成写入,然后才能调用汇编器。管道的另一个优点是编译器和汇编器可以同时运行,并且它更多地使用了 SMP 架构。特别是当编译器需要等待来自源文件的数据(因为阻塞 I/O 调用)时,操作系统可以给汇编器完整的 CPU 时间,让它更快地完成工作。