메모리 구조는 메모리를 필요에 따라 여러가지 종류로 나누어 둠을 의미한다.

나누는 이유는 유사한 성향의 데이터를 묶어서 저장하면 관리가 용이해지고 접근속도가 향상되기 때문이다.

일반적으로 4가지, 좀 더 세분화 하면 5가지 정도로 구분된다.


⚀ Code 영역


코드 자체를 구성하는 메모리 영역으로 Hex파일이나 BIN 파일 메모리가 있다. 

프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역이다.


⚁ Data 영역


전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다.


     🁀 초기화 된 데이터는 data 영역에 저장되고,

     🁁 초기화 되지 않은 데이터는 BSS (Block Stated Symbol) 영역에 저장된다.


프로그램이 실행 될 때 생성되고 프로그램이 종료 되면 시스템에 반환 된다.

함수 내부에 선언된 Static 변수는 프로그램이 실행 될 때 공간만 할당되고, 그 함수가 실행 될 때 초기화 된다.

 

   

⚂ Heap 영역


필요에 의해 동적으로 메모리를 할당 하고자 할 때 위치하는 메모리 영역으로 동적 데이터 영역이라고 부르며, 

메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.

이 영역에 데이터를 저장 하기 위해서 C는 malloc(), C++은 new() 함수를 사용한다.

 

   

⚃ Stack 영역


프로그램이 자동으로 사용하는 임시 메모리 영역이다.

지역(local) 변수, 매개변수(parameter), 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다.

함수 호출 시 생성되고, 함수가 끝나면 시스템에 반환 된다.

스택 사이즈는 각 프로세스마다 할당 되지만 프로세스가 메모리에 로드 될 때 

스택 사이즈가 고정되어 있어, 런타임 시에 스택 사이즈를 바꿀 수는 없다.

명령 실행시 자동 증가/감소 하기 때문에 보통 메모리의 마지막 번지를 지정 한다.



< 구체적인 메모리 영역 >




 

   



자료 출처 : http://sfixer.tistory.com/30