지역변수 이용에 따른 속도차이에 대한 질문입니다.

kknd345의 이미지

void Message( Environment *env )
{
     double aaa= env->value;
     double bbb= env->number;
//중략

//밑에 aaa와 bbb 가 엄청나게 반복되는 구조 

}

간단하게 예를 든 건데요

Message 함수가 while 문으로 계속 반복해서 호출되는 구조입니다.

저런식의 경우일때 aaa와 bbb 변수를 이용하는게 빠른가요? 아님 env->number나 env->value 를 바로 쓰는게 빠른가요?

익명 사용자의 이미지

테스트 해보지 않고는 모르는 일이겠지만, aaa와 bbb를 이용하는 쪽이 컴파일러의 최적화에 더 유리하지 않을까요?

서지원의 이미지

kknd345 wrote:
void Message( Environment *env )
{
     double aaa= env->value;
     double bbb= env->number;
//중략

//밑에 aaa와 bbb 가 엄청나게 반복되는 구조 

}

간단하게 예를 든 건데요

Message 함수가 while 문으로 계속 반복해서 호출되는 구조입니다.

저런식의 경우일때 aaa와 bbb 변수를 이용하는게 빠른가요? 아님 env->number나 env->value 를 바로 쓰는게 빠른가요?


행복하게도, 현대의 컴파일러는 대부분 저런 경우에 대한 최적화를 합니다. level 1정도로 해서 어셈 코드를 생성해서 보시면 거의 비슷하게 나올겁니다.

최적화를 전혀 안한다면, 아마도 aaa, bbb변수에 캐슁을 해서 사용하는게 좀 더 빠를 가능성이 크겠지요. 간접 메모리 접근이 줄어드니까요.

아시겠지만, 매뉴얼 최적화는 프로파일링을 통해서 병목을 찾은 후에 하는 것이 맞습니다. 물론, 그렇게 하시겠지만요...

익명 사용자의 이미지

aaa, bbb로 하면 읽기 좋겠군요. readability

성능상? 제 생각에는 전혀... 둘다 동일하겠습니다.