2013-01-05 5 views
0

여러 파일을 통해 훨씬 쉽게 코드를 작성할 수 있습니다. 그러나 그것들은 "모든 파일을 하나의 파일에 저장"하거나 gcc와 같은 최신 컴파일러가 둘 다 동일한 바이너리를 생성하는 것과 같은 성능 차이를 제공합니다. 성능 차이를 말하면 파일 크기, 컴파일 시간 및 실행 시간을 의미합니다.하나의 파일에 모든 파일을 넣는 대신 여러 파일 C를 사용할 때 이진 파일에 차이가 있습니까?

이것은 C로만 제공됩니다.

+2

제 생각에 컴파일은 영향을받을 수 있습니다. 실제로 링크에는 많은 영향이 있지만 런타임에는 영향을 미치지 않아야합니다. –

+0

@KarthikT 컴파일 링과 링크가 더 길어 졌습니까? –

+0

더 긴 링크 나는 링크가 주로 다양한 파일들을 함께 처리하기 때문에 기대할 수 있습니다. 순수한 컴파일 링은 영향을받지 않을 수도 있지만 전체 프로세스는 링크 된 덕분에 더 길어질 것입니다. –

답변

2

변경된 파일 만 재 컴파일해야하기 때문에 컴파일 시간이 여러 파일로 향상됩니다 (의존성 추적 빌드 빌드 시스템이 적절하다고 가정).

링크해야 할 일이 많으므로 연결하는 데 더 오래 걸릴 수 있습니다.

전통적으로 컴파일러는 여러 소스 파일 (인라인 함수와 같은 항목은 까다 롭습니다)에서 최적화를 수행하지 못했습니다. 따라서 결과 실행 파일은 다를 가능성이 있으며 잠재적으로 느려질 수 있습니다.

0

일부 테스트에서 컴파일 및 링크에 더 오래 걸립니다. 당신은 다른 바이너리를 받게 될 것입니다. 적어도 제게는 그렇습니다.

올인원 파일은 여러 개의 파일 버전은 내가 5 분 안에 함께 넣어 않았다으로, 에누리 벤치 마크를 수행 할 .000769 MS 에서 실행 .000764 MS 에서 실행, 그것은 작은 프로그램이었다 .

전반적인 차이점이 없습니다.

+0

7 마이크로 초가 걸리는 것이 의미있는 벤치 마크는 아닙니다. –

2

모든 것이 단일 파일에있을 때 최적화 할 기회가 더 많습니다. 예 : -O2으로 시작하는 gcc는 본문이 사용 가능하면 인라인으로 선언되지 않더라도 일부 기능을 인라인합니다 (더 많은 기능이 -O3으로 인라인 될 수 있음). 따라서 실행 시간에는 차이가 있으며 때로는 사용자에게주의를 기울일 기회조차 있습니다. 심지어 -fwhole-program을 사용하면 main()을 제외한 외부 함수의 라인 외 버전을 신경 쓰지 않는다고 GCC에 알립니다 (GCC는 모든 외부 함수가 정적 인 것처럼 동작합니다).

전체 컴파일 시간이 늘어날 수 있습니다 (분석 할 항목이 많고 모든 최적화 알고리즘이 선형이 아니기 때문에) 또는 감소합니다 (동일한 헤더를 여러 번 구문 분석 할 필요가없는 경우). 바이너리 크기가 늘어날 수 있으며 (인라인으로 인해 더 빠르게 실행됩니다) 또는 줄이기 (경우에 따라 인라인이 코드 크기가 감소하는 지점으로 호출자의 코드를 단순화 할 수 있음)

개발 및 유지 관리가 쉽기 때문에 sqlite의 접근 방법을 사용할 수 있습니다. 여러 개의 소스 파일이 있지만 컴파일 전에 하나의 파일로 합병됩니다 ("병합").