20160315_김가연_업무일지_전역변수
시작하기전에 전역변수에 대해 조금 설명을 하자면
『
전역변수≠지역변수(=함수 내에 선언되는 변수=>stack영역에 만들어짐)
함수 밖에 선언되는 변수 = >Date ,BSS영역에 만들어짐
∴전역변수 중에서도 Data영역에 만들어지는 변수와 BSS영역에 만들어지는 변수로 나누어진다.
※참고
메모리영역
code(text)-기계어
Data-전역변수//초기값이 있으면
BSS-전역변수//초기값이 없으면
Heap-동적할당
Stack-지역변수
』
이 말을 대변할 소스코드가 있습니다.
#include <stdio.h>
int D;
int E=99;
int F;
int G=98;
int H;
int main()
{
int A=0;
int B;
int C=100;
printf("A =%p\nB =%p\nC =%p\n",&A,&B,&C);
printf("=====================================================\n");
printf("D =%p\nE =%p[Data]\nF =%p\nG =%p[Data]\nH =%p\n",&D,&E,&F,&G,&H);
printf("=====================================================\n");
printf("printf=%p\nmain =%p\n",&printf,&main);
return 0;
}
이 소스코드를 보시면
지역변수는 A ,B ,C이고
전역변수는 D ,E ,F ,G ,H 인것을 알 수 있습니다.
전역변수 중에서도 E ,G는 초기값이 존재하는 것을 알 수 있습니다.
이것을 컴파일 하여 실행시켜보면
A =0018FD50
B =0018FD4C
C =0018FD54
=====================================================
D =01189300
E =01188000[Data]
F =011892FC
G =01188004[Data]
H =011892F8
=====================================================
printf=01171330
main =01171260
보시는 것처럼
변수가 속해있는 주소가 출력되는것을 보실 수 있습니다.
전역변수와 지역변수가 속해있는 주소의 위치가 확연하게 차이나는것을 확인하실수 있습니다.
전역변수 중에서도 E와 G의 주소가
다른 전역변수의 주소와 차이가 나는것을 확인하실수 있습니다.
전역변수는
모든 함수들이 접근 할 수 있다는 장점이 있습니다.
하지만 memory에서 program이 종료할때까지 사라지지 않는다는 단점이 있습니다.
즉, memory를 차지하고 실행파일(exe) 용량이 증가한다는 것 입니다.
그러므로 신중하게 사용하면서도 사용을 최소화 하는 것이 좋습니다.