문제

그만큼 GCC 4.1.2 문서 이것에 대해 말할 수 있습니다 -pipe 옵션:

-파이프

다양한 편집 단계 간의 통신을 위해 임시 파일 대신 파이프를 사용하십시오. 이것은 어셈블러가 파이프에서 읽을 수없는 일부 시스템에서 작동하지 않습니다. 그러나 GNU 어셈블러에는 문제가 없습니다.

내 시스템 어셈블러가 파이프를 지원하지 않았다면 오류 메시지에서 알 수 있다고 생각합니다. 따라서 그 문제 외에도 그 옵션을 사용하든 언제 중요합니까? 그것을 사용하기로 결정하는 데 어떤 요인이 있어야합니까?

도움이 되었습니까?

해결책

일반적으로 아무런 차이가 없습니다

가지고 있습니다 + 그리고 - 고려 사항. 역사적으로 컴파일러와 어셈블러를 동시에 실행하면 RAM 자원을 강조합니다.

GCC는 오늘날의 표준에 따라 작습니다 -pipe 약간의 멀티 코어 액세스 가능한 병렬 실행을 추가합니다.

그러나 마찬가지로 CPU는 너무 빠르기 때문에 임시 파일을 만들어 눈치 채지 않고 다시 읽을 수 있습니다. 이후 -pipe 기본 모드가 아니었고 때로는 조금 작용합니다. 단일 개발자는 일반적으로 시차를 알아 차리지 않는 것으로보고합니다.

이제 큰 프로젝트가 있습니다. Firefox, NetBSD 또는 그와 비슷한 것을 모두 만들 수있는 단일 트리를 확인할 수 있습니다. 예를 들어 X를 모두 포함하여 작은 서브 시스템 구성 요소입니다. 작업에 수천 및 수천 개의 C 파일에 수백만 줄의 코드가 포함될 때 차이를 알 수 없거나 보지 못할 수도 있습니다. 내가 아시다시피, 사람들은 일반적으로 한 번에 이와 같은 작은 부분에서만 일합니다. 그러나 릴리스 엔지니어이거나 빌드 서버에서 작업하거나 무언가를 변경하는 경우 stdio.h, 당신은 전체 시스템을 구축하여 당신이 무언가를 깨뜨 렸는지 확인하고 싶을 것입니다. 그리고 지금, 모든 성능 낙하는 아마도 중요합니다 ...

다른 팁

중간 크기의 프로젝트에 대한 우리의 경험에서 덧붙였다 -pipe 빌드 시간에 눈에 띄는 차이가 없었습니다. 우리는 그것에 몇 가지 문제를 일으켰습니다 (때로는 오류가 발생하면 중간 파일을 삭제하지 못하는 경우가 있습니다.

지금 시도해 보면 소스 / 빌드 대상이 NFS (Linux Network)에있을 때 구축하는 것이 적당히 더 빠릅니다. 메모리 사용량은 높습니다. RAM을 채우지 않고 NFS에 소스가 있다면 -pipe에서 승리하는 것 같습니다.

솔직히 그것을 사용하지 않을 이유가 거의 없습니다. -파이프는 약간 더 많은 램만 사용합니다.이 상자는 건축 코드 인 경우 괜찮은 금액이 있다고 가정합니다. 시스템이 더 보수적 인 파일 시스템을 사용하여 그 길을 따라 모든 임시 파일을 삭제하는 경우 빌드 시간을 크게 향상시킬 수 있습니다 (예 : Ext3).

한 가지 장점은 -pipe를 사용하면 컴파일러가 파일 시스템과 덜 상호 작용한다는 것입니다. RAM 디스크 인 경우에도 데이터는 임시 파일을 사용할 때는 블록 I/O 및 파일 시스템 레이어를 통과해야하지만 파이프를 사용하면 조금 더 직접적으로됩니다.

파일을 사용하면 컴파일러가 먼저 어셈블러를 호출하기 전에 쓰기를 완료해야합니다. 파이프의 또 다른 장점은 컴파일러와 어셈블러 둘 다 동시에 실행될 수 있으며 SMP 아키텍처를 조금 더 많이 사용하고 있다는 것입니다. 특히 컴파일러가 소스 파일의 데이터를 기다려야 할 때 (I/O 통화를 차단하기 때문에) 운영 체제는 어셈블러에 CPU 시간을 전체적으로 제공하고 작업을 더 빨리 수행 할 수 있습니다.

하드웨어 관점에서 -pipe 하드 드라이브의 수명을 보존합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top