2014-07-10 3 views
2

나는 속도를내는 데 필요한 작업 응용 프로그램이 있습니다. 필자는 각 기능에 걸리는 시간을보고하는 프로파일 링 (자세한 내용은 here 참조)을 설정합니다. 나는 기능의 다른 하위 부분에서 소비되는 시간에 관해 무엇이든 발견 할 수있는 방법을 찾을 수 없다."인라인"이 작동하는지 어떻게 알 수 있습니까?

그런 다음 몇 가지 빠른 액세스를 원하는 일부 자주 액세스하는 작은 함수의 선언에 "인라인"키워드를 삽입했습니다. 그러나 다시 프로파일 링을 할 때, 필자는 인라인으로 만든 기능을 포함하여 동일한 기능 목록을 보았습니다. 이것은 인라인 키워드가 방금 무시되었는지 여부에 대해 의심 스러웠습니다.

일부 컴파일러에서 인라인 키워드는 사용 가능한 메모리 양과 같은 것에 따라 컴파일러가 선택적으로 무시할 수있는 것이 었음을 막연하게 기억합니다.

"인라인"키워드가 실제로 작업을 완료했는지 확인하기 위해 할 수있는 검사가 있습니까?

답변

1

당신이 시도 할 수 :

  • 을 (여부를 분해하거나 nm와 함수 기호를 확인 또는 안드로이드가 무엇이든), 또는 디버거를 통해 스테핑 컴파일러의 조립 또는 기계 코드 출력을 검사

  • 컴파일러 pragma/속성을 사용하여 강제로 인라이닝 (사용 가능한 경우, 예 : GCC has a function attribute always_inline), 프로파일 링 결과가 영향을받지 않으면 컴파일러가 이미 인라이닝하고 있음

  • 그러나 프로파일 링을하고있는 것은

당신이 회상으로 inline 인라인 저해하지 않도록하기 위해 프로파일 문서를 확인 (및 멤버 함수가 인라인 암시 적으로 그들의 클래스 내에 정의)입니다 단지에 대한 힌트 컴파일러. 어떤 사람들은 이것이 하나의 정의 규칙 문제를 관리하는 편리한 방법이라고 주장하지만, 키워드가 실제로 인지 확인하기 위해 개별 C++ 컴파일러 코드를 확인해야합니다. 요즘은 의미가 없습니다.. 컴파일러는 영향을 미치는 최적화 플래그, 라인 외부 함수의 크기, 함수 호출 수를 포함하여 인라인 할 때 모든 종류의 메트릭을 사용할 수 있습니다 (예 : 인라인이 아닌 경우).

+1

always_inline을 추가하면 함수 이름이 프로필 보고서에서 사라지게됩니다. 그것은 이전에 인라이닝하지 않았고 현재는 다음과 같은 충분한 증거입니다. – Mick

+0

@Mick : cool -하지만 백만 달러짜리 질문은 ... 더 빠릅니까? :-) –

+0

나는 그렇게 생각하지만, 문제를 혼동시키기 위해이 이슈로 고통을 겪고있다. http://stackoverflow.com/questions/24631535/what-may-cause-the-speed-of-an-app-to- 변경 – Mick

관련 문제