모두의 코드 커뮤니티

반복문에서 변수의 선언 위치

반복문에서 사용되어 질 변수의 선언 위치에 대해 고민하고 있습니다.

for문 안에서 사용되어 지게 될 변수(int, string, vector …)들을 for문 밖에서 선언하는 것이 성능면에서

좋은 점이 있는지 여쭤보고 싶습니다.

제가 찾아본 글들에 의하면 heap 공간에 메모리 할당이 발생할 경우의 메모리 문제 및 메모리 할당 문제.

객체의 생성자와 소멸자의 오버헤드등에 의해서 성능에 문제가 발생할수 있다고 하더라고요.

제가 생각하기에 성능의 차이가 없다면 [1]이 변수의 스코프가 for문 안으로 제한되기 때문에

[1]이 더 좋은 코딩 같은데 성능 관련 얘기 때문에 무엇이 더 좋은 방법인지 판단이 어려워 여쭤봅니다.

위 상황에 대한 간단한 코드 예시를 아래 쪽에 작성하였습니다.

> [1]
for (int i=1; i< bignumber; ++i)
{
std::vector<double> a(size,0);
//vector a를 가지고 복잡한 작업을 한다
}

> [2]
std::vector<double> a
for (int i=1; i< bignumber; ++i)
{
a.resize(size,0);
//vector a를 가지고 복잡한 작업을 한다
}

그리고 혹시 몰라 제가 봤었던 글들의 링크를 첨부하도록 하겠습니다.
http://www.gamecodi.com/board/zboard-id-GAMECODI_Talkdev-no-1461-z-45.htm
https://okky.kr/article/322734
https://jinghane.tistory.com/entry/반복문-변수-선언-위치에-따른-속도
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=69&MAEULNO=28&No=17831

메모리 할당의 오버헤드가 훨씬 크기 때문에 [1] 이나 [2] 는 큰 차이가 없을 것 같네요.

다만 [1] 이 좀 더 직관적이기 때문에 저는 [1] 을 추천하고 싶습니다.

1 Like