프로그래밍언어

[프로그래밍언어] Memory Allocation Area(code,data,stack,heap)->Segment

Memory allocation process 에 따라 

RAM은 4가지 area로 구성됩니다.

Local variable or stack

Free memory or Heap

Static and global variables

Code Area 

 

지역 변수는 스택에 저장됩니다.

code area는 C program insturction에 의해 머신코드로 변환후 저장됩니다.

static과 global변수들을 위한 공간도 따로 있습니다.

그리고 free memory area를 heap이라고 합니다. heap의 크기는 프로그램실행중 계속 바뀝니다. 

 

Data

Data: data(초기화o)와 bss(초기화x)로 이루어져있습니다. 초기화된 데이터는 data에 저장, 초기화되지않은 데이터는 bss에 저장됩니다. 

함수 내부에 선언된 static변수의 경우 프로그램이 실행될 때 공간만 할당되고, 그 함수가 실행될때 초기화됩니다. 

Heap: free memory area(DMA)-runtime에 결정(compile때체킹x). ex) C-malloc(), C++-new연산자 

Stack: static memory area(SMA)-compile time 에 결정. 스택의 크기는 각 프로세스마다 할당 됩니다. 실행 시에 크기를 바꿀 수 없습니다. 

 

SMA(Static Memory Allocation)

정적 메모리, data영역, stack영역 사용

Data: 프로그램 시작과 동시에 할당된 영역이 잡히고 끝나면 OS에 반환

Stack: 함수 시작과 동시에 할당된 영역이 잡히고 끝나면 OS에 반환

 

DMA(Dynamic Memory Allocation)

동적 메모리, heap영역을 사용

stack에서 pointer변수를 할당하고, 그 pointer가 가리키는 heap영역의 임의의 공간부터 원하는 크기만큼 할당해 사용