Spring 3주차 첫날. Spring Security에 대해 배웠다. 생소한 개념이 많지만 지금까지 그랬던 것 처럼 프로젝트 하면서 실습해보면 이해가 갈 것 같다. 오늘 TIL은 그동안 미뤘던 메모리 저장 구조에 대해 정리해보려 한다.
프로그램이 실행되기 위해서는 메모리에 load 되어야 한다. 그리고 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다. 프로그램이 운영체제로 부터 할당받는 메모리공간은 아래와 같다.
코드(Code) 영역
실행할 프로그램의 코드가 저장되는 영역. = 텍스트 영역. 읽기 전용 데이터.
함수, 제어문, 상수 등 함수에 대한 기계어 코드가 들어간다.
CPU가 코드영역에 저장된 명령어를 하나씩 가져가서 처리한다.
데이터(Data) 영역
프로그램의 초기값이 있는 전역(global) 변수와 정적(Static) 변수, 배열이 저장되는 영역.
프로그램의 시작과 함께 할당되어 프로그램이 종료하면 소멸.
데이터 영역 아래의 BSS영역에는 초기값이 없는 전역변수, 정적변수, 배열이 저장된다.
Compile하는 동안 크기가 결정되어 그 이후로 변하지 않는다.
힙(Heap) 영역
사용자(프로그래머)가 직접 관리할 수 있고 그래야만 하는 메모리 영역.
사용자에의해 메모리 공간이 동적으로 할당되고 해제된다.
선입선출로 동작. 더이상 힙 영역을 참조하는 변수가 없으면 소멸된다.
메모리의 낮은주소에서 높은 주소 방향으로 할당된다.
스택(Stack) 영역
함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역.
함수의 호출과 함께 할당되어 함수의 호출이 완료되면 소멸.
스택 영역에 저장되는 함수의 호출 정보를 Stack Frame이라 한다.
후입선출로 작동하며 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.