2010-02-12 6 views
2

컴파일러의 최적화 프로그램이 모든 호출 사이트를보고 호출 된 함수의 프롤로그 및 에롤 로그를 최적화하므로 C의 정적 함수가 잠재적으로 더 빠를 수 있습니까?정적 기능이 더 빠릅니까?

+0

이 질문은 실제로 합법적 인 점수 점수 질문이며 커뮤니티 위키 만들기는 합법적 인 대답을 방해합니다. :-) (즉, 나는 사람들이 "진짜"질문에 대답하는 것을 선호하지 않는다고 생각한다.) –

+0

@Chris : 나는 그것을 알고 싶다. 지금 변경할 수 있습니까? – Mike

+0

아니요, 일단 게시물이 CW가되면, 의도적으로 게시를 취소 할 수있는 방법이 없습니다. 참조 : http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts-on-stack-overflow –

답변

3

이론적으로는 가능합니다. 그러나 동시에 현대 컴파일러 중 일부는 번역 단위에서 코드 간의 관계를 분석하는 "글로벌 최적화"를 수행 할 수 있습니다. 여기에는 전체 프로그램에서 특정 함수에 대한 모든 호출 사이트를 분석하는 기능 (단일 번역 단위와 반대되는 기능)이 포함될 수 있으며 잠재적으로 이러한 최적화를 비 정적 함수로 확장 할 수도 있습니다.

2

컴파일러를 인라인으로 만들 수 있습니다. 그렇습니다. 그러나 언제나처럼 컴파일러에 달려 있습니다. 출력 어셈블리를 테스트하고 확인해야합니다.

4

함수가 정의 된 위치와 동일한 변환 단위에서 호출되는 경우 (해당 함수가 분명히 있어야 함을 의미하는 static) 컴파일러는 함수가 static으로 선언되었는지 여부에 관계없이 해당 호출을 쉽게 인라인 할 수 있습니다.

일부 품질 컴파일러는 전체 프로그램 최적화도 수행하므로 다른 번역 단위의 함수 호출에 대해서도 인라이닝 및 기타 최적화가 발생할 수 있습니다.

+1

예! 'LLVM'이라고 말할 수 있습니까? 프로그래밍 실천에서 절대적으로 보이는 것은 흔히 극저량으로 드러납니다. –

+0

@Tim : +1 <3 LLVM (및 기타 동적 컴파일 시스템). 그러나 Visual C++의 하이 엔드 에디션조차도 전체 프로그램 최적화를 수행 할 것입니다. –

+1

그리고 가난한 GCC는 아직 그것을 할 수 없습니다. (그러나 나는 그것을 추가하기위한 작업이 진행중이라고 들었습니다. –

관련 문제