2016-08-27 3 views
-3

최적의 C++ 프로그램을 만드는 방법에 대한 질문이 있습니다.변수 대신 표현식을 사용하는 C++ 코드 최적화

c= a/2 
c = (a*b)/2 
c = (a/2) + b 

등 는이 값을 저장하거나 return <expression>를 사용하는 변수를 사용하는 것이 좋습니다 :

내가 좋아하는 표현을 계산하는 기능이?

변수를 생성하는 데 공간이 필요하다는 것을 이해하고 return <expression>은이를 피할 수 있습니다. 그러나 이것이 여러 번 반환되는 경우 변수를 선언하는 것보다 많은 오버 헤드가 발생합니까?

+3

두 경우 모두 생성 된 어셈블리 코드를 확인할 수 있습니다. – sjsam

+5

문제는 없습니다. 최적화 컴파일러는이 모든 것을보고 동일한 코드로 컴파일합니다. –

+1

"공통 하위 표현식 제거"라는 문구를 찾으십시오. –

답변

2

아무런 차이가 없습니다.

컴파일러는 사용하지 않는 중간체를 없애고, 표현식을 최적화하고, 호출 된 함수를 인라 인닝하는 등의 여러 가지 최적화 작업을 수행합니다. 이러한 최적화는 기본적으로있을 것입니다. 차이는 없습니다. 여기서 잘못된 것들에 초점을 맞추고 있습니다. 작업에 적합한 알고리즘을 선택하는 것과 같은 상위 레벨 최적화가 중요합니다.

여기서 가장 잘하는 점은 명확하고 읽기 쉽고 유지 보수하기 쉬운 코드를 작성하는 것입니다.

5

이것은 쓸모없는 마이크로 최적화의 전형적인 경우입니다. 컴파일러는 어쨌든 변수를 최적화 할 가능성이 높습니다.

변수를 사용하는 이유는 문서화입니다. 내 말은 변수에 의미있는 이름을 붙일 수 있다는 것입니다. 그러나 함수 이름이 함수가 반환하는 것을 이미 표현했기 때문에 이것은 좋은 주장이 아닙니다.

따라서 대부분의 경우 변수를 먼저 할당하지 않고 표현식을 반환합니다. 코드에 추가하는 각 변수는 복잡성을 추가하기 때문에 일반적으로 나쁜 것으로 간주되는 추가 가변 상태를 의미합니다.

+0

그것은 * 아주 좋은 논쟁이다! –

+0

@ JasonC : 함수 이름보다 얼마나 표현력이 좋을까요? 문제는 변수를 할당 한 다음 직접 반환하는 것입니다. –

+0

나는 이것이 보완적인 칭찬으로, 이것은 매우 좋은 대답이라는 것을 의미했습니다. Var name과 fn name은 하나 또는 다른 이름이 아닙니다. 둘 다해라. 표현식 함수 이름과 표현형 변수 이름. 예를 들어 반환 할 변수가 반환되기 전에 함수 본문 전체에서 사용됩니다. 그것이 무엇을 의미하는지에 관해 알기 위해 기쁜! 그리고 일반적으로 변수 이름. –

0

컴파일러가 앞서 말했듯이 어쨌든 컴파일러는이를 최적화하지만 디버깅 및 유지 관리도 고려합니다. 표현 결과를 직접 반환하면 많은 두통이 발생할 수 있습니다. 함수의 결과가 벡터의 크기를 결정하지만 결과가 음수라는 간단한 예제를 생각해보십시오.