林's

프로그램의 구조 본문

프로그래밍/현대적 C++ 프로그래밍

프로그램의 구조

풀림이 2019. 4. 7. 11:50

c 또는 c++ 컴파일러로 만들어진 일반적인 프로그램은

크게 4가지의 영역으로 구성되어 있습니다.

궁금하신 분들은 아래으 정리글과 영상을 통해 같이 학습해보아요!

1. heap

동적 할당하는 객체나 변수들이 저장되는 공간입니다.

ex). int *a = new int(42);

2. stack

static(전역)이 아닌 함수의 매개변수와 로컬 변수가 저장되는 크기가 매우 작은 공간입니다.

 

실제로 아래와 같이 실험을 해보시길 권장드립니다.

 

ex).

main() 함수 안에서

int arr[1000000]; (=>약 4MB) 를 선언해보시면 안 되는 것을 알 수 있는데. 이는 앞 서 말씀드렸듯이 스택영역이 힙영역에 비해 터무니 없이 작기 때문에 발생하는 오류입니다.

 

cf). 재귀를 통해 브루트 포스 알고리즘을 수행할 때 스택오버플로우를 한 번쯤 겪어보신 적이 있으실 겁니다. 이 또한 재귀의 호출스택이 프로그램의 스택 영역을 사용하기 때문입니다.

3. data

데이터 영역에는 다음과 같은 데이터들이 저장됩니다.

1). 전역, 정적 함수,

2). 전역,정적 변수

3). 상수(const)

 

나아가 이를 3가지 영역으로 다시 세분화 시키기도 합니다.

2번에서 말씀드렸듯이, data 영역(파일) 안에는 전역변수 중에서도 초기화가 되어 있는 값들만 들어갑니다.

 

프로그래머가 직접 초기화를 해준 예)

int a = 10;

main() { ... }

 

그러나 프로그래머가 초기화를 해주지 않은 전역변수들은 .bss 파일에 저장되어 따로 관리됩니다.

 

그리고 3).번의 상수는 시스템마다 상이하나, C/C++의 경우 .rodata 파일에 저장됩니다.

4. code

프로그래머가 작성한 코드가 저장되는 영역입니다. 읽기만 가능한 상태로 저장돼기 때문에 수정이 불가능합니다.

 

Comments