2016-06-09 5 views
0

QT 5.6에서 C++을 사용하고 있습니다. 다음과 같이 나는이 개 스타일의 간단한 콘솔 응용 프로그램이 있습니다변수가 성능에 영향을 줍니까?

//First style 

qstring x = “Hi!”; 

void func() 
{ 
     QTextStream(stdout) << x; 
} 

int main() 
{ 
     while (true) 
     { 
       func_one(); 
     } 
} 

//Second style 

void func() 
{ 
     QTextStream(stdout) << “Hi!”; 
} 

int main() 
{ 
     while (true) 
     { 
       func(); 
     } 
} 

더 CPU를 스트레스 때문에 낮은 성능을 큰 차이가 없을 수도 있지만 것 어느 우리는 서버 곳으로 큰 규모에이를 적용 할 때 2 초마다 연결되면 위의 루프와 유사한 상황이 발생하고 여러 변수 (동일한 변수 및 데이터는 아님)를 사용하면 리소스 사용이 약간 줄어들어 리소스 사용량을 줄이면 성능이 크게 향상 될 수 있습니다. 그래서 변수를 사용하면 성능이 향상되지만, 함수가 반복적으로 호출 되더라도 변수를 한 번만 사용하거나 변수를 사용하면 변수가 "x"값을 반복적으로 검사해야하므로 프로그램이 느려집니다. "저장하고 데이터를 검색 할 수 있습니까?

편집 1 :

내가 내 코드에서 다시 변수를 사용하지 않는 우리는 더 컴파일러 최적화가 없음을 고려할 수 있습니다. @DrDonDut 당신이 준 링크의 대답도 대답 $array === (array) $array보다 빠르다. 즉, 마이크로 최적화이고 마이크로 최적화라고 부르는 두 번째 스타일이거나 성능에 해를 끼치 지 않을까하는 질문입니다.

+3

1) 컴파일러는 당신이 생각하는 것보다 똑똑하다 읽기 - 당신은 const를 x'를 qstring'사용 특히, 경우에 위의 동일한 코드가 잘 생성 될 수있다. 2) 지금 성능에 대해 걱정하지 마십시오. 3) 반드시해야 할 일이 무엇인지 추측하기 전에 성과를 측정하십시오. –

+0

그건 중요하지 않습니다. –

+0

실생활에서는 문자열을 하드 코딩하지 않아도되므로 항상 데이터를 변경하기 위해 변수를 사용해야합니다. 그러나,'QTextStream (stdout)'에 대한 변수를 생성하여 매번 생성되지 않도록 저장할 수 있습니다. –

답변

5

컴파일러 최적화로 인해 예제가 잘못되었거나 다른 변수에서이 변수를 사용하겠습니까, 아니면 그냥 테스트 코드 일 뿐이므로 명확하지 않습니다.

하지만 일반적으로 잘못된 방식으로 최적화하고 있습니다. 단일 변수 또는 단일 함수를 최적화하는 것은 의미가 없습니다. 당신은 당신의 프로그램이 그 시간을 보낼 곳을 추측해서는 안되며, 먼저 작동하는 방식으로 프로그램을 작성하고 OK로보아야합니다.

프로그램이 작동 한 후에 성능이 좋지 않다면 병목 현상 (프로그램이 많은 시간을 보내는 곳)을 찾아야합니다. 추측에 의해서가 아니라 프로파일 러의 도움을 받거나 디버거에서 찾을 수 있습니다.

찾을 때 중요한 장소를 최적화해야합니다.

에 대한 premature optimization

관련 문제