My Study/System

메모리 구조

메모리 구조에서 알아야할 스택(Stack), 힙(Heap), 데이터(Data) 이렇게 3가지를 알아보자.







1.텍스트(Text)

  컴파일된 프로그램 소스가 기계어 형태로 저장되어 있는 위치이다.


2.데이터(Data)

  데이터는 전역변수와 static 변수가 저장되는 영역이다. 스택과 달리 프로그램이 종료 되어야지만 메모리에서 제거가 된다.


3.BSS

  초기화되지 않는 변수들이 있는 위치로, 항상 0으로 초기화된다.


4.스택(Stack)

  스택은 함수 호출 시 지역변수와 매개 변수가 저장되는 영역이다. 만약 함수 호출이 완료가 되면 메모리에서 제거가 되는 특징을 가지고 있으며 컴파일 런 때 크기가 결정이 된다.


5.힙(Heap)

  힙은 프로그래머 선언에 의하여 메모리 구조가 할당 및 소멸이 되는 영역으로서 런타임 때 크기가 결정이 된다.




여기서 Data, Heap, Stack 영역 3가지를 이해하기 쉽게 간단한 예제를 통해 살펴보자.




위 예제를 메모리 그림으로 표현하자면 아래 와 같이 된다.


메모리 생성 순서를 보도록 하자.


1. malloc로 result 포인터 영역 생성

2. a=10 생성

3. b=20 생성

4. result 포인터 생성 

5. add 함수 호출 후 c=30 생성


이번에는 제거되는 순서이다.


1.add 함수 종료에 따른 c=30 제거

2.free로 result 포인터 영역 제거

3.main 함수 종료에 따른 result가 제거

4.프로그램이 종료됨으로서 a=10, b=20 제거





'My Study > System' 카테고리의 다른 글

레지스터  (0) 2015.05.13
Handray  (0) 2015.03.25
Stack Corruption  (0) 2015.03.18
리틀 엔디안(Little Endian), 빅 엔디안 (Big Endian)  (1) 2015.03.14
메모리 구조  (0) 2014.12.13
레이스 컨디션(Race Condition)  (1) 2014.11.18

최근 트랙백

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.