티스토리 뷰

 

C,C++ 에서 변수를 loop 안에 선언하는 것과 밖에 선언하는 것 둘의 성능상 차이는 없다. 똑똑한 현대의 컴파일러가 코드를 최적화 시켜 모두 같은 어셈블리 코드를 만들어내기 때문이다.

 

int i = 0;
while(i < 100)
{
    int temp = i;
    i++;
}

vs

int i = 0;
int temp;
while(i < 100)
{
    temp = i;
    i++;
}

 

.file "test.cpp"

.def __main; .scl 2; .type 32; .endef

.text

.globl main

.def main; .scl 2; .type 32; .endef

.seh_proc main

main:

.LFB0:

pushq %rbp

.seh_pushreg %rbp

movq %rsp, %rbp

.seh_setframe %rbp, 0

subq $48, %rsp

.seh_stackalloc 48

.seh_endprologue

call __main

movl $0, -4(%rbp)

.L3:

cmpl $99, -4(%rbp)

jg .L2

movl -4(%rbp), %eax

movl %eax, -8(%rbp)

addl $1, -4(%rbp)

jmp .L3

.L2:

movl $0, %eax

addq $48, %rsp

popq %rbp

ret

.seh_endproc

.ident "GCC: (Rev3, Built by MSYS2 project) 5.2.0"

 

loop 안에다 선언하는 것과 밖에다 선언하는 것은 변수의 범위를 한정하는 것과, 가독성이라는 차이를 만들어낸다.

loop 안에서 선언된 변수를 loop 밖에서 사용하려고 하면 끔찍한 에러 메세지를 만날 수 있다. 또한 loop 안에서 선언된 변수는 그 변수가 그 loop안에서만 사용된다는 것을 명확하게 알려주어 칼퇴를 하기 위해 재빠르게 코드를 훑어 보고 있는 프로그래머에게 도움을 주기도 한다.

따라서 gcc 0.9버전 같은 전설 속의 컴파일러를 사용하는 사람이 아니라면 loop안에서 변수를 선언하여 범위 한정과 가독성 이라는 두마리 토끼를 다 잡아보도록 하자.

 

참고:

http://stackoverflow.com/questions/7959573/declaring-variables-inside-loops-good-practice-or-bad-practice-2-parter

http://stackoverflow.com/questions/982963/is-there-any-overhead-to-declaring-a-variable-within-a-loop-c

http://stackoverflow.com/questions/407255/difference-between-declaring-variables-before-or-in-loop

 

'Programming' 카테고리의 다른 글

객체란 무엇인가?  (0) 2021.03.15
[Docker] 한글 설정하기  (0) 2017.05.18
[npm] Error: `gyp` failed with exit code: 1  (0) 2017.01.14
node js + mariadb 한글 깨짐  (1) 2017.01.13
프로그래머를 위한 타자연습 typing.io  (0) 2016.04.03
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함