메모리 세그먼트

오늘은 메모리 세그먼트에 대해서 알아볼께요.^^

프로그램을 만들기 위해서는

C언어나 기타 언어를 통해 소스를 작성한후,

그 소스를 컴파일하게 됩니다.

이렇게 컴파일된 프로그램은

데이타의 종류에 따라 메모리의 다른 곳에 위치하게 되는데요.

이 각각의 위치를 메모리 세그먼트라 하며,

다섯개의 종류로 구분되어집니다.

알아보기 쉽게 그림을 그려볼께요.

텍스트 세그먼트

데이터 세그먼트

bss 세그먼트



힙 세그먼트





스택 세그먼트



메모리의 낮은 주소에서 높은 주소 순으로

텍스트, 데이터, bss, 힙, 스택 세그먼트가 위치하게 되며,

힙과 스택영역은 그 크기가 가변적입니다.

텍스트 세그먼트 (Text Segment)

: 코드(Code) 세그먼트라고도 말하며,

프로그램의 기계어 명령이 들어있습니다.

이 영역은 변수가 아닌 코드만 저장되어 있기 때문에,

읽기만 가능하고 쓰기는 금지되어 있습니다.

데이터 세그먼트 (Data Segment)

: 초기화 된 전역 변수와 정적 변수가 저장됩니다.

정적 변수란 static 키워드를 통해 선언된 변수를 말합니다.

bss 세그먼트 (Block started symbol Segment)

: 초기화 되지 않은 전역 변수와 정적변수가 저장됩니다.

힙 세그먼트 (Heap Segment)

: 프로그래머가 직접 할당한 메모리가 저장되는 영역으로,

malloc() 함수를 사용해 메모리를 할당할수 있습니다.

사용자의 쓰임에 따라 그 크기가 달라지며,

메모리의 낮은 주소에서 높은 주소 방향으로 증가합니다.

스택 세그먼트 (Stack Segment)

: 지역 변수와 각종 정보들(SFP, RET 등) 이 저장되는 영역으로,

FILO(First In Last Out) 구조로 되어있습니다.

먼저 들어간 값이 나중에 나오는 구조로,

마지막에 들어갔던 값이 가장 먼저 나온다고 이해하시면 쉬울꺼에요.

이 구조는 함수를 호출하고 소멸시키는 방식과 유사하여,

함수의 지역변수를 저장하고 사용하는데 스택영역이 사용되어집니다.

스택 영역 또한 그 크기가 가변적이며,

저장되는 방향은 힙 영역과는 반대로

높은 주소에서 낮은 주소 방향으로 저장이 됩니다.

실제 소스를 작성하여 살펴보도록 하겠습니다.




 

위와 같이 소스를 작성한 후,

각 변수의 주소 값을 출력시켜보겠습니다.





 

변수를 int형으로 선언하였기때문에 크기는 4바이트입니다.

출력 값과 메모리 세그먼트의 표를 비교해가며 살펴보시면 쉽게 이해되실겁니다.

이상, 메모리 세그먼트에 대해서 간단히 살펴보았습니다~^^v

by S2nNAMU | 2013/04/15 15:46 | PROGRAMING | 트랙백 | 덧글(0)
트랙백 주소 : http://littletrue.egloos.com/tb/4793286
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >