시작하기전에 전역변수에 대해 조금 설명을 하자면
『
전역변수≠지역변수(=함수 내에 선언되는 변수=>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) 용량이 증가한다는 것 입니다.
그러므로 신중하게 사용하면서도 사용을 최소화 하는 것이 좋습니다.
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
20160310_노유찬_CPU모듈 (0) | 2016.03.16 |
---|---|
20160315_업무일지_정우민_인터럽트(FND실습) (0) | 2016.03.16 |
20160315_장진웅_업무일지_펌웨어 분석&실습 (1) | 2016.03.16 |
20160315_최기영_업무일지_펌웨어분석3 (1) | 2016.03.16 |
2016-03_15_인터럽트_노태경_업무일지 (0) | 2016.03.16 |
2016_3_15_전역변수_노태경_업무일지 (0) | 2016.03.16 |
비트연산계산기 (2) | 2016.03.16 |
20160314- 이보원-스마트컨트롤러-펌웨어 (BK128을 이용한 스위치 점등 실험) (3) | 2016.03.16 |