2017-12-09 30 views
0

내 마음에 온 특정 종류의 최적화가 가능한지 확인하고 싶습니다. 인라인 함수는 외부 조건을 피할 수 있습니까?

// test.h 
class Test 
{ 
public: 
    static void Main(); 

private: 
    __forceinline static bool func1() 
    { 
     return ((externalCond1 && externalCond2) ? true : false); 
    } 
} 

// test.cpp 
#include "test.h" 

void Test::Main() 
{ 
    if(func1() == true) 
    { 
     //Do something 
    } 
} 

Main의 조건은 인라인 func1 덕분에 멀리 최적화, 실제로 테스트되지 않도록 할 것인가? ( func1 내의 조건 만 테스트 함).

이것은 예제 코드 일뿐입니다. 하지만, 내 실제 인라인 된 함수는 어쨌든 짧은 것에 관한 것이므로이 최적화를 수행 할 수 없다는 사실이 밝혀지면 func1 내의 조건을이 함수를 호출하려는 모든 위치에 복사하면됩니다.

마지막으로 "반환 값 최적화"패러다임의 단순한 사례인지 여부 (최적화가 가능한 경우에만)를 알고 싶습니다. __forceinline 속성이 영광

+3

C++ 컴파일러는 관찰 할 수있는 효과가없는 최적화를 사용하도록 허용되지만 필수는 아닙니다. 원하는 최적화에는 관찰 가능한 효과가 없습니다. C++ 컴파일러는 재량에 따라이 최적화를 구현할 수도 있고 구현하지 않을 수도 있습니다. 그렇게 할 수는 있지만 그렇게 할 필요는 없습니다. 일반적으로이 최적화의 수행 여부는 코드를 컴파일 할 때 선택한 특정 컴파일 옵션에 따라 다릅니다. –

답변

0

경우, 코드가 조건이 컴파일 단위의 외부 변수 인 의미에서 외부에있는 경우

void Test::Main() 
{ 
    if (((externalCond1 && externalCond2) ? true : false) == true) 
    { 
     //Do something 
    } 
} 

에 해당 자신의 값은로, 그들은 멀리 최적화 할 수 없습니다 컴파일 타임에 알려지지 않았습니다.