2011-10-22 2 views
0

거기에 성능 차이가 있습니다 :스택에서의 성능 차이 (다시)?

int test; 
void Update() 
{ 
    test +=2; 
} 

및이 :

void Update() 
{ 
    int test; 
    test +=2; 
} 

-

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

두 번째 코드를 더 읽기 쉽기 때문에 물어보십시오. 클래스 헤더에서 선언해야합니다.) 성능이 낮지 않으면 사용합니다.

+1

테스트 범위는 발생하는 의미를 나타 내기 때문에 테스트가 일치하지 않습니다. –

답변

1

두 코드 조각 사이에 성능 차이가있을 확률은 매우 낮습니다. 코드를 프로파일 링하는 것만으로는 확실하게 알 수 있지만 여기서 고려해야 할 중요한 기능적 차이가 있습니다.

update() 변수 내에서만 test 변수가 필요한 경우 이어야합니다. 함수 내에 선언해야합니다. 그런 식으로 변수는 함수 내에서 제한된 범위를 갖습니다. 이러한 지역 변수의 수명은 변수가 상주하는 범위로 제한됩니다. 함수 본문 내에서 닫는 중괄호 }까지.

test 변수가 함수 호출에서 상태를 유지하기를 원한다면 함수 내에 선언 된 로컬 정적 변수가 될 수 있습니다.

함수 외부에 test을 선언하면 전역 변수가됩니다. 그리고 그것은 동일한 file.Also에있는 모든 기능에 액세스 할 수있는 전역 변수는 평생 프로그램의 끝까지 확장됩니다.

+0

고맙습니다, 기능상의 차이에 대해 알고, 나쁜 예제를 선택했습니다;) Btw, static int를 사용하면; 함수에서 클래스의 인스턴스간에 정적인가? – Sapd

+0

@Sapd : 함수 내에서 선언 된'static int' 변수는 함수에 대한 모든 호출에서 공유됩니다. 예, 모든 클래스 인스턴스에서 유지 관리됩니다. –

0

성능상의 차이는 없을 것입니다. 이것은 테스트하기 쉽지만 컴파일러에 따라 다릅니다. 출력 어셈블리를 점검하고 벤치마킹을하십시오. 차이가 있다면, 그것은 작은 것 같습니다.

그러나 중요한 차이점이 있습니다. 두 번째 예제는 test이 매번 Update으로 재설정되므로 실제로 쓸모가 없습니다. 이를 방지하려면 static int test으로 선언 할 수 있지만 기본적으로 첫 번째 예제를 다시 작성했습니다.

그래서 매우 다른 것들이지만 성능은 비슷합니다.