2017-01-20 8 views
4

C가 assert()을 사용하여 기능 어설 션을 지원한다는 것을 알고 있습니다. C/C++에서 성능 어설 션을 지원하는 라이브러리/라이브러리가 있습니까? 다른 언어가 있습니까? 다음의 라인을 따라성능 어썰트

뭔가 :

perf_assert_begin(ID1) 
... 
... 
/* assert the time taken is less than 2000 ms */ 
perf_assert_end(ID1, interval(ID1) < 2000) 
+3

음, 타이머를 시작한 다음 합계가 제한보다 적은 정상적인 어설 션을 사용할 수 있습니다. – BoBTFish

+2

'assert'는 전형적인 릴리즈 빌드 ('NDEBUG'가 정의되었을 때)에서 아무것도하지 않는 * 매크로 *입니다. –

+1

언어 또는 표준 라이브러리에 있지 않습니다. 즉, (거의) 사소한 것입니다. – utnapistim

답변

1

어설는 언어에 내장되어 <cassert> 또는 static_assert에서 assert 중 하나를 사용하여 수행 할 수 있습니다.
그래서 시간을 수동으로 가져 와서 assert 문에서 시차를 확인해 보는 것이 어떻습니까?

#include <cassert> 
#include <chrono> 

#ifndef NDEBUG 
auto start = std::chrono::high_resolution_clock::now(); 
#endif 
... 
#ifndef NDEBUG 
assert(std::chrono::duration_cast<milliseconds>(
    std::chrono::high_resolution_clock::now() - start).count() < 2000 
); 
#endif 

전처리 지시어

NDEBUG가 정의되어있는 경우 코드는 컴파일러에 통과 할 수 있습니다. assertNDEBUG도 정의되어 있고 다른 하나가없는 경우에는 제대로 작동하지 않는 경우에만 조치를 취합니다. NDEBUGstart 식별자로 정의 될 때

당신은 식별자 고유하게 (특정 컴파일러) 또는 별도의 범위로 전체를 이동 __COUNTER__ 일부 GCC-마법을 할 수있는, 이름 충돌을 방지하기 위해. 당신에게는 문제가되지 않을 수도 있지만, 어떤 사람들은 프로그램을 특정 관점에서 바라 보면 조건부 정의 변수에 놀라는 경우가 있습니다.