티스토리 뷰

출처: MIPS Green Card

 

MIPS Green Card를 보면, Text(Code), Static Data, Dynamic Data 영역과 Stack이 있는것을 볼 수 있다. 

 

Text영역에는 실행할 프로그램의 코드가 저장된다. CPU는 코드 영역에 저장된 명령어를 하나씩 들고가서 처리한다. 

 

Static Data 영역에서는 전역 변수와 static 변수가 들어간다. 프로그램의 시작과 동시에 할당된다.

 

Dynamic Data영역이 heap인데, 사용자가 동적할당한 데이터로 채워진다. 런타임에 크기가 결정된다. 

C에서 realloc()이나 Java의 new같은 명령어를 실행할 때 사용되는 공간이다. 

동적 할당의 단점은

1. memory leak: malloc했는데 주소 까먹음..ㅠ 다른 malloc으로 포인터를 실수로 뒤집어 씌웠다. 

2. Dangling Pointer: demalloc한 곳을 여전히 포인터가 가르키고 있다면..ㅠ

 

Memory Leak을 해결하는 방법은 다음 두가지가 있다. 

- Reference Counter : 

- Mark-Sweep : 

Dangling Pointer를 해결하는 방법은 다음 두가지가 있다. 

- Tombstone:

- Lock-and-keys: 


Stack부분이 스택인데, 컴파일 시간에 크기가 결정된다.

오른쪽 그림에서도 알 수 있듯이 스택 프레임에 함수를 실행할때마다 스택을 쌓는다. 컴구 시간에 어떤 식으로 쌓이는지도 배웠다. 

함수가 종료되면 스택에서 제거된다. 따라서 함수 안의 지역변수는 굳이 메모리에서 수동으로 내려줄 필요가 없다. 

 

* C99부터는 변수로 배열 크기를 지정하는 것도 된다고 한다. (가변 길이 배열 - Variable-length array)

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함