디버깅 옵션 (예 : gprof)과 다시 컴파일 할 필요가없는 프로파일 러 (예 : Valgrind, OProfile, ...)를 사용하여 소스 코드를 다시 컴파일해야하는 프로파일 러를 사용하는 경우의 차이점은 무엇입니까?다시 컴파일해야하는 프로필러와 그렇지 않은 프로필러의 차이점은 무엇입니까?
답변
내가 명명 된 프로파일에 익숙하지 않아요하지만 프로파일 링에 대한 두 가지 방법이 있습니다 :
계측는,이 방법은 일반적으로 예를 들어, 자바, 항상 (재 컴파일이 필요하며 닷넷 응용 프로그램은 동적으로 계측 할 수있다). 이 메소드를 사용하여 루틴이 호출되는 빈도 또는 특정 루프가 얼마나 많은 반복을 하는지를 정확하게 측정 할 수 있습니다.
샘 플링은 다시 컴파일 할 필요가없는 방법으로, 일정 간격으로 스택의 스냅 샷을 찍는 것입니다. 이것은 병목 현상을 찾는 효과적인 방법임이 입증되었습니다.
두 가지 전략에 대한 추가 정보가 있습니다 here
저는 Valgrind와 gprof에서 최소한 말할 수 있습니다.
둘을 사용하는 것의 주된 차이점은 기본적으로 이미 말한 것입니다. gprof의 경우 프로파일 링 코드를 포함하도록 특별히 컴파일해야합니다. 그런 다음 실행 파일을 실행하면 (프로그램에 내장되어 있으므로) 프로파일 링 코드가 실행되고 gprof로 처리 할 수있는 gmon.out 파일이 생성되어 프로그램의 런타임 통계를 보여줍니다.
Valgrind는 프로그램을 특별한 방법으로 컴파일 할 필요가 없다는 점에서 다릅니다 (출력을 유용하게하려면 디버그 기호를 추가하는 것을 제외하고). Valgrind는 시뮬레이션 된 CPU에서 실행되는 내부 형식으로 프로그램을 동적으로 변환합니다 (은 느림 임). 즉, 특정 컴파일 작업없이 Valgrind를 통해 모든 프로그램을 실행할 수 있습니다.
또 다른 중요한 차이점은 Valgrind가 gprof보다 훨씬 많은 정보를보고 할 수 있다는 점입니다.하지만이 정보는 gprof와는 관련이 없습니다.
프로파일 링 기술은 기호 테이블 정보를 필요로하므로 컴파일 및 링크시 요청해야합니다.
이외에도 일부 프로파일 러는 기록 기능 유지 루틴을 컴파일 링하여 각 기능의 시작 부분과 끝 부분을 컴파일함으로써 작동합니다. 이러한 함수는 함수에서 사용한 시간과 호출 한 위치의 일부 레코드를 기록하려고 시도 할 수 있습니다. 타이밍 기능은 해당 녹음 기능을 호출하는 오버 헤드로 인해 정확하지 않습니다.
다른 프로파일 러는 호출 스택의주기적인 샘플에 의존하지 않고이를 수행 할 필요가 없습니다. 이러한 프로파일 러는 낮은 오버 헤드를가집니다. 타이밍 수치는 샘플링의 통계적 특성으로 인해 정확하지 않습니다.
이 점에있어서 암시 적으로 "병목 현상"을 찾아내는 데 타이밍의 정확성이 필요하며 이는 내 지식으로는 결코 사실이 아니 었습니다. method I've always used은 시간이 얼마나 걸리는지보다는 시간을 소비하면서 프로그램이 무엇을하는지에 대한 통찰력에 의존합니다. 통계적 근거에 관심이 있다면 look here 수 있습니다.
- 1. 새로운 QLabel과 그렇지 않은 QLabel의 차이점은 무엇입니까?
- 2. Silverlight 4 컨트롤을 다시 컴파일해야하는 이유는 무엇입니까?
- 3. LayoutInflater를 직접 호출하는 것과 그렇지 않은 것의 차이점은 무엇입니까?
- 4. 녹아웃에서 attr {.....}을 사용하는 것과 그렇지 않은 것의 차이점은 무엇입니까?
- 5. Delegate Handlers를 사용하는 이벤트와 그렇지 않은 이벤트의 차이점은 무엇입니까?
- 6. MYSQL은 그렇지 않은 경우
- 7. 그렇지 않은 부분은
- 8. CGFloat는 클래스이고 그렇지 않은 클래스입니까?
- 9. 이, 그렇지 않은 희미한 오류
- 10. 그렇지 않은 부분은 string.equals은 (otherstring)
- 11. vim에서 파이썬 (루비) 지원으로 컴파일 된 것과 그렇지 않은 것의 차이점은 무엇입니까?
- 12. Zend Autoloader에 네임 스페이스 등록 : 후행 "_"을 포함하는 것과 그렇지 않은 것의 차이점은 무엇입니까?
- 13. Python subprocess.call은 작동하지만 subprocess.check_call은 그렇지 않습니다 - 차이점은 무엇입니까?
- 14. 임의의 "뜨겁거나 그렇지 않은"알고리즘/솔루션이 필요합니다.
- 15. 서명되지 않은 short와 USHORT의 차이점은 무엇입니까?
- 16. 제한된 장치와 제한되지 않은 장치의 차이점은 무엇입니까?
- 17. 오버로드 메서드 또는 그렇지 않은 경우?
- 18. xcode 프로필러와 호리병박 테스트 프레임 워크의 통합
- 19. C# dynamic을 사용하여 Y-combinator를 구현했는데 그렇지 않은 경우 무엇입니까?
- 20. XMPP를 사용한 데이터 전송 - 그렇지 않은 이유는 무엇입니까?
- 21. 에뮬레이터에서 팽창 예외가 발생하지만 내 드로이드에서는 그렇지 않은 이유는 무엇입니까?
- 22. FileStreamResult와 FilePathResult의 차이점은 무엇입니까?
- 23. 파일이 존재하는지 확인하십시오. 그렇지 않은 경우,
- 24. 그렇지 않은 경우의 X %의 Y : 무언가
- 25. random_shuffle은 threadsafe입니까? 그렇지 않은 경우 rand_r을 사용하십시오.
- 26. JavaScript는 NaN이지만, 그렇지 않은 것을 알고 있습니까?
- 27. 값을 반환하는 메서드와 그렇지 않은 메서드
- 28. 경우 (listStr.size == 0) {그렇지 않은 (listStr.isEmpty()) {
- 29. 하면 ... 그렇지 않은 경우에는() 대 사용
- 30. 변수가 그렇지 않은 경우에 또 다른