본문 바로가기
코스웨어/16년 스마트컨트롤러

20160315_김가연_업무일지_전역변수

by 알 수 없는 사용자 2016. 3. 16.
728x90
반응형

시작하기전에 전역변수에 대해 조금 설명을 하자면

전역변수지역변수(=함수 내에 선언되는 변수=>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

보시는 것처럼

변수가 속해있는 주소가 출력되는것을 보실 수 있습니다.

전역변수지역변수가 속해있는 주소의 위치가 확연하게 차이나는것을 확인하실수 있습니다.

전역변수 중에서도 EG의 주소가

다른 전역변수의 주소와 차이가 나는것을 확인하실수 있습니다.

 

전역변수

모든 함수들이 접근 할 수 있다는 장점이 있습니다.

하지만 memory에서 program이 종료할때까지 사라지지 않는다는 단점이 있습니다.

즉, memory를 차지하고 실행파일(exe) 용량이 증가한다는 것 입니다.

 

그러므로 신중하게 사용하면서도 사용을 최소화 하는 것이 좋습니다.

 

728x90