CPP_어소_22_지역/전역 변수

CJB_ny·2022년 5월 18일
0

CPP_AROTHO

목록 보기
20/83
post-thumbnail

정적 -> 데이터 영역

지역 -> 스택

왜 왜 왜


main함수 내에 선언되는 것은

Stack에 메모리 할당후 종료되면 메모리 해제된다.

그런데

전역 변수는 Data 영역이라는 곳에 메모리가 할당이된다.

세부적으로 더 따지면 다 나뉠 수 있기는 한데 일단 이까지만.

변수의 종류

1. 지역 변수

가 사용하는 메모리 영역 == 함수가 호출 될 때 사용하는 영역

-> 스택

2. 전역 변수

main함수에서든 다른 함수에서든 다 사용이 가능함.

데이터 영역에 있기 때문에 == 프로그램이 최초로 실행될 때 데이터 영역에 메모리를 할당 받기 때문에

함수의 호출과 종료의 상관없이 계속 존재.

3. 정적 변수

static

4. 외부 변수

extern

정적변수 외부변수 모두 데이터 영역을 사용한다.

메모리 영역

OS가 프로그램(프로세스)가 실행될 때

부여하는 메모리 영역을 개념적으로 나누어서 지칭한 것이다.

OS마다 더 세분화 할 수있지만 크게는 이렇게 됨.

1. 스택 영역

지역 변수가 사용하는 메모리 영역 == 함수가 호출 될 때 사용하는 영역

2. 데이터 영역

전역 변수가 사용하는 메모리 영역

이런 최초에 호출되는 함수 main함수가 호출이 되면서 그때,

데이터 영역이 프로그램 시작과 동시에 만들어짐.

이렇게 내가 사용하는 전역변수들은 프로그램 시작과 동시에 데이터 영역의 한자리를 차지하고있다.

  • 프로그램 시작시 생성

  • 프로그램 종료되면 해제

이거 두개는 왜 이렇게 되는지 이해를 했나?

Test안의 지역변수는 스택에 메모리 할당 후 해제 == 날아감

전역은 데이터 영역에서 그대로 편안히 있음 ㅇㅋ?

3. 힙 영역

4. 읽기 전용(코드, ROM)

1~4번 메모리 영역이 누구에 의해 사용되고 지칭되는지 보도록 하자.


그리고 이것이 말이 될 까?

지금 이것은

Test라는 함수가 호출 되었을 때의 할 일들이 적혀있는 것이다.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글