본문 바로가기

JAVA

힙과 스택의 개념

W.Richard Stevens 씨께서 저술한 Advanced Programming in the Unix Environment 의 7.6절은 보면 C 프로그램의 Layout에 대해 설명이 나와있습니다.

간단히 설명해 보면

/-------------------------/  메모리상에서
|                         |       높은 구역
|         Stack           |
|                         |
/-------------------------/
|                         |
|          Heap           |
|                         |
/-------------------------/
|   Uninitialized data    |
| ---------Data---------- |
|    Initialized data     | 
/-------------------------/
|                         |
|          Text           | 
|                         |  메모리상에서
/-------------------------/       낮은 구역

Text segment : CPU에 의해 실행되는 머신 코드들이 있는 영역.Read Only

Initalized data segment : data segment 라 불리는 영역이며, 초기화된 외부 변수 static 변수등이 저장되는 영역입니다. 보통 Text segment + initialized data 영역을 합쳐서 프로그램이라고 합니다.
예) static int a = 1;

Uninitalized data segment : bss segment 라고 불리며, 이 영역을 프로그램이 실행될때 0 이나 NULL Pointer로 초기화 됩니다.
예) static int a; (외부 변수나, static 변수중 초기화 되지 않은 변수들)

Stack : 자동 변수들이 저장되는 곳이고, 함수가 호출될때 함수 안의 자동변수(함수내 로컬 변수) 등이 저장되는 곳입니다. 함수가 실행되는 동안에만 존재하며 함수의 실행이 종료되면 그 변수들도 사라집니다. 함수내의 자동 변수외에 saved frame pointer 등의 함수를 호출한 caller의 환경 정보도 저장합니다.

Heap : 동적 메모리 할당을 할경우 Heap 영역에 할당이 됩니다. Heap 영역은 uninitialzed data 영역의 top 과 stack 영역의 bottom 부분에 위치합니다.

이 밖에 더 자세한 것을 알고 싶으시면 Phrack 문서의 Smashing The Stack For Fun And Profit 을 읽어 보시거나 위에서 제가 언급한 책을 읽어 보시길 바랍니다. Phrack 문서는 해킹 문서로 해킹을 하기 전초 단계로 위의 영역에 대해 설명이 자세히 나와있습니다.

www.phrack.org 에서 받을 수 있으며, 49호 14 장이 위의 주제를 다룹니다.

'JAVA' 카테고리의 다른 글

추상클래스와 인터페이스 차이  (0) 2011.04.11
인터페이스 정의(추상클래스)  (0) 2011.04.11