티스토리 뷰
※ 본 포스팅은 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있음을 밝힙니다.
예전에 이것과 관련된 내용을 IT 포럼에서 발표하기 위해 만들어 놓은 prezi가 있다.
함께 참고하면 좋을 듯.
http://prezi.com/obkhqdxaz3zx/programming-compile-loading-for-korean/
데이터 메모리는 크게 코드 세그먼트, 스택 세그먼트, 데이터 세그먼트, 힙 세그먼트 네 가지로 구분 지을 수 있다. 첫 번째 코드 세그먼트는 소스파일의 코드가 할당되어 잡히는 메모리 영역이다. 이 부분에 변화가 있어선 안되기 때문에 기본적으로 쓰기가 금지되어 있다. 다음으로는 스택 세그먼트에는 지역변수가 할당 된다. 스택 구조로 쌓아 올려짐으로써 재귀호출이 가능해진다. 이 곳에서 호출된 변수들은 임시적인 성격을 가지게 되는데 이유는 스택 세그먼트에서 호출된 변수는 호출된 지역(함수)에서만 사용이 가능하기 때문이다.(이는 코딩을 할 때 같은 이름의 변수를 서로 다른 함수에서 따로 사용할 수 있는 이유와 같다.) 따라서 해당 함수가 종료되면 스택 세그먼트에 올라왔던 변수들도 함께 소멸된다. 데이터 세그먼트는 프로그램이 빌드 되면서 올라오는 전역변수, STATIC 변수, 일반상수, 문자열 등이 쓰인다. 따라서 어느 함수에서나 호출이 가능하다. 데이터 세그먼트에서 호출된 변수들은 프로그램이 시작과 함께 선언되며 프로그램이 종료될 때 소멸한다. 호출되는 함수와 함께 시작하고 소멸되는 스택 세그먼트의 변수와 상반되는 개념이다. 이를 표로 정리하면 다음과 같다.
변수 종류 |
생성 시기 |
소멸 시기 |
지역 변수 |
함수 호출과 함께 |
함수 종료와 함게 |
전역 변수 |
프로그램 실행과 함께 |
프로그램 종료와 함께 |
STATIC 변수 |
프로그램 실행과 함께 |
프로그램 종료와 함게 |
그 외에 힙 세그먼트가 있는데 조사해본 바에 따르면 메모리의 동적 할당으로 표시되어 있다. 이 부분에 관한 개념에 대해 어림짐작의 느낌밖에 없지만 일반적으로 정적으로 밖에 할당되지 않는 변수들을 개발자가 필요한 만큼 동적으로 할당하여 사용할 수 있는 메모리라고 추측된다.
'개인공부 > 시스템' 카테고리의 다른 글
httpd.conf 에 대해 : 사용자별 홈 디렉토리 설정 등 (0) | 2014.04.14 |
---|---|
스택 프레임(Stack Frame)에 대해 (2) | 2014.01.16 |
시스템 인터럽트(interrupt), 시스템 콜(system call) (0) | 2014.01.16 |
x86 레지스터의 종류와 역할 (0) | 2014.01.16 |