본문 바로가기
C

20201101#(7) 메모리구조 (3) (전역변수,static)

by zho 2020. 11. 1.

오늘은 메모리 구조의 data 부분에 대해서 알아보자.

데이터 영역은 간단하게 넘어가면 될 것 같다.

데이터 영역은

1. 전역 변수와 static변수가 할당되는 영역

2. 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 소멸되는 영역

이다.

위의 말이 이해가 안된다면 아마 전역 변수와  static변수의 뜻을 모르기 때문일 텐데

전역 변수는 프로그램 전체에서 사용할 수 있다 하여 전역 변수인데 예를 들어 설명해보자면,

 

void func1()

{

int a=1;

}

void func2()

{

int b=2;

}

void main()

{

int c=3;

}

와 같은 코드가 있다고 해보자. int a , b, c는 각 함수에 선언된 지역변수(선언된 함수 내에서만 사용 가능 )이다. 만약 여러분이 모든 함수에서 사용할 수 있는 변수를 만들고 싶다면 전역 변수를 선언하면 된다.

예를 들어

void func1()

{

int a=1;

}

void func2()

{

int b=2;

}

void main()

{

int c=3;

}

위 함수에서 새로운 값인 int d를 main, func1, func2 함수에 선언하고 싶다고 생각해보자. 지역 변수만 이용한다면 다음과 같이 나타낼 수 있다.

void func1()

{

int a=1;

int d;

}

void func2()

{

int b=2;

int d;

}

void main()

{

int c=3;

int d;

}

이 코드를 좀 더 짧게 만들고 싶거나 간결하게 보이게 하고 싶으면 전역 변수를 사용할 수 있다.

int d; //전역 변수 사용

void func1()

{

int a=1;

}

void func2()

{

int b=2;

}

void main()

{

int c=3;

}

전역 변수의 사용은 코드를 간결하게 보이게 할 수 있다.

 

static 변수는 정적 변수이다.

코드로 예를 들어보자

위 코드는

0

0

0

0

으로 출력됐다. 왜냐하면 num은 지역변수이기 때문에 함수가 종료되면 pop 되고, 함수가 시작되면 다시 새롭게 생성되기 때문이다. 변수가 사라지지 않게 하기 위해선 정적 변수를 사용하면 된다.

정적변수 사용법은 간단하다. 변수 앞에 static만 붙이면 된다.

static int num = 0;처럼 말이다!

 

위 코드 값은 static 변수로 선언되었기 때문에 값은

0

1

2

3

으로 출력된다. (코딩해보는 것 추천)

 

자 전역 변수와 static 변수에 대한 설명이 끝났다 그러면 다시 메모리 구조의 data영역의 정의를 살펴보자.

데이터 영역은

1. 전역 변수와 static변수가 할당되는 영역

2. 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 소멸되는 영역

이다.

 

 

다음에는 heap영역에 대해서 알아보자

728x90