stack = over flow
FILO = First In Last Out
가장먼저 들어가서 가장 나중에 나오다.
FIFD = First In First Out
가장 먼저 들어가서 가장 빨리 나오다.
Visual studio 6.0까지만 해도 메모리 순서가 정해져 있었다. 그러나 잦은 해킹으로 인하여 컴파일러가 다르게 메모리순서를 정해놓았다.
하지만, 구조는 똑같다. 이번에는 메모리의 5대영역인 code, data, bss, heap, stack의 대해서 알아본다.
순서대로 세로로 나열하면 다음과 같다.
code(기계어) - main(),상수, 함수(printf), 제어문
data- 전역변수
bss-전역변수
*전역변수는 2가지로 나뉜다. 이것은 나중에 다룬다.(data, bss)
heap-동적할당
stack- 일반변수
heap과 stack은 상황에 따라 영역을 확대할 수 있다. stack은 부족시 heap의 영역을 침범한다.
heap과 stack은 실행파일이 없다. 즉, 컴파일시 없어진다.
예를 들어 inum =5;라는 변수선언을 하였다.
inum은 stack영역에서 관리하고 상수 5는 code가 처리한다. stack은 가장 먼저 inum이라는 변수를 저장하다가 code에 의해서 불려간다. 즉, 가장먼저 들어갔다 늦게 나오는 개념인 FILO개념이다.
위의 code, data, bss는 컴파일시 절대 서로의 영역을 침범하거나 없어지지 않는다. 실질적으로 실행파일을 만드는데는 이 3가지의 용량이다. heap과 stack은
컴파일시 사라진다.
오늘 소스를 구성했던 파일에서 5개의 변수가 있다.
icnt, cp, inum1, inum2, inum3이 있는데 이들의 원래 메모리크기(6.0버전)순은
역으로 inum3, inum2, inum1, cp, icnt순이다.
그러나 메모리영역에서 할당할때는 반대순인 icnt~inum3순으로 할당된다.
가장큰 메모리는 stack영역에서부터 관리하고 가장 낮은 메모리가 code영역에서 관장한다.
overflow : 데이터가 다른 영역으로 범람
HEAP overflow - heap이 stack영역을 침범하는 경우
STACK overflow - stack이 heap영역을 침범
'C언어 수업정리 > 3월 수업정리' 카테고리의 다른 글
3월 21일 포인터 한 번더!!!! (0) | 2013.03.21 |
---|---|
3월 21일 float형 실수저장과정 (0) | 2013.03.21 |
3월 cpu와 메모리 음수 (0) | 2013.03.20 |
3월 20일 포인터(2)예제 p5-4.c (0) | 2013.03.20 |
3월 20일 수업정리 포인터, symbol table (0) | 2013.03.20 |