함수 f를 인라인으로 선언하지 않은 경우 것처럼 다음 :번역 단위와 gcc에서 자동으로 인라인 된 함수 4.6
아 :
X f(Y y);
A.cpp :
다른 번역 단위에서 그런X f(Y y)
{
...
}
:
B.cpp :
#include "A.h"
Z g(W w)
{
...
... f(...) ...
...
}
그런 다음 두 번역 단위를 컴파일합니다. A.o와 B.o를 gcc 4.6과 연결 한 다음 gcc를 통해 연결합니다. (아마도 -O3에서 두 단계로)
gcc는 링크 시간에 성능을 위해 함수를 인라인하는 것을 고려할 것입니까? 아니면 너무 늦었습니까?
코드 검토에서 컴파일러가 인라인 할 때보다 잘 알고 있기 때문에 필자는 필자가 필자의 함수를 인라인으로 선언해서는 안된다고 제안했다. 함수가 헤더에 정의되어 있지 않으면 컴파일러가 인라인 할 수있는 옵션이없는 것보다 항상 인상적이었습니다.
내가 GCC 함수가 인라인 등 다양한 소스 파일로 분할하게 만들 수 있다고 생각하지 않습니다
왜 그런 일을하고 싶습니까? '인라인 (inline) '은 단지 그것을 위해 발명 된 것입니다. 그것은 "다중 정의 된 기호"오류없이 헤더 파일에 함수의 정의를 가질 수있게합니다. 그리고 요즘 컴파일러는 함수를 효과적으로 인라인 할 때 좋은 전략을 가지고 있습니다. –
@JensGustedt : 이유가 무엇입니까? 게으름. 차라리 옵티마이 저가 함수를 인라인하는 것이 가장 좋을 때, 스택 대신 레지스터에 로컬 변수를 넣을 때와 동일한 방식으로 함수를 인라인하는 것이 좋습니다. 나는 이것이 논쟁의 여지가없는 관점이며, 당신은 그 요점을 놓쳤다 고 생각합니다. –
흠, 정확히 내가 말한 것입니다. 컴파일러에게 당신을 위해 그것을 할 기회를주십시오. 'inline'은 컴파일러에게 적절할 때 컴파일러에게 요구하는 것 외에 다른 것을 의미하지는 않습니다. 예제를 유지하기 위해 컴파일러가 레지스터에 저장하거나 유출하기로 결정한 지점에서 로컬 변수를 완전히 볼 수 있습니다. 깨끗한 코드를 작성하면 컴파일러가 도움이 될 것입니다. 솔직히 .c보다 헤더 파일에 함수를 정의하는 것이 왜 더 어렵습니까? 다른 장소에서 정확히 같은 텍스트? –