2010-07-15 1 views
11

GCC 4.4 또는 MSVC를 사용하여 C++를 컴파일 할 때 함수가 인라인 될 때 ​​컴파일러에서 메시지를 내보낼 수 있습니까? g의 ++와인라인 된 함수 찾기

+0

좋은 질문하지만 난 당신의 동기에 대한 궁금 해요. – Daniel

+0

헤더에서 cpp 파일로 많은 코드를 이동시키는 구조화 된 코드가 다시 느리게 실행됩니다. 함수 인라이닝의 수에 차이가 있는지보고 싶습니다. –

+0

어떻게 지을까요? 출시 또는 디버그? Visual Studio에서/OPT를 지정하고 있습니까? –

답변

2

, 나는 당신이 g ++ 보고서가 할 수 있다고 생각하지 않습니다,하지만 당신은 문자, 예를 들어 nm 보여줍니다 어떤 도구를 사용하여 결과 이진 검사 할 수 있습니다 :

#include <iostream> 
struct T { 
     void print() const; 
}; 
void T::print() const { std::cout << " test\n" ; } 
int main() 
{ 
     T t; 
     t.print(); 
} 

~ $ g++ -O3 -Wall -Wextra -pedantic -o test test.cc 
~ $ nm test | grep print 
0000000000400800 t _GLOBAL__I__ZNK1T5printEv 
0000000000400830 T _ZNK1T5printEv 

#include <iostream> 
struct T { 
     void print() const { std::cout << " test\n" ; } 
}; 
int main() 
{ 
     T t; 
     t.print(); 
} 
~ $ g++ -O3 -Wall -Wextra -pedantic -o test test.cc 
~ $ nm test | grep print 

대를

(두 번째 경우의 nm 출력 없음)

EDIT : 또한 프로파일 러가 사용될 수 있습니다. gprof의 쇼,이 두 가지 예에서 :

0.00  0.00  0.00  1  0.00  0.00 global constructors keyed to _ZNK1T5printEv 
0.00  0.00  0.00  1  0.00  0.00 T::print() const 

대 단지

0.00  0.00  0.00  1  0.00  0.00 global constructors keyed to main 
+5

FWIW와 거의 같은 성능을 보였다. 컴파일러는 일부 인스턴스를 인라인 할 수있다. 다른 사람들은 아닙니다. 프로그램이 충분히 크다면, 좀 더 복잡한 것이 필요하다. – Cogwheel

+0

사실. 나는 어떤 프로파일 러 (gprof가 나타나지 않는 것)와 같은 것을보고하는지 궁금하다. 쓸만한 작은 도구 일 수 있습니다. – Cubbi

+0

감사합니다. 컴파일 된 바이너리의 차이점을 볼 수 있습니다. 헤더 전용 버전은 더 많은 기능을 인라인 한 것으로 보입니다. 이전에 gprof를 실행했고 (-pg로 컴파일 된)이 둘 사이에는 큰 차이가 없었습니다. 난 그냥 callgrind 및 헤더 전용 버전에서 프로그램을 실행 그들은 callgrinds 출력에 표시되지 않는 많은 기능에 인라인 것으로 나타납니다. –