본문 바로가기

CS/O.S

(운영체제) 프로세스 구조와 힙

 

C언어 코드를 예로 들어 힙에 대한 메모리 구조를 살펴보자

int main() {
    int *data;
    data = (int *) malloc(sizeof(int));
    *data = 1;
    printf("%d\n", *data);
    
    return 0;
}

malloc : 동적으로 메모리를 생성하는 함수 (args는 size)

현재는 int가 4바이트 이기 때문에 32 bits의 메모리 공간이 생성된다.

 

해당 data는 Heap 메모리 공간에 생성된다.

 

출력 결과 : 1


이전과 같은 작업을 동일하게 진행한다.

  • Stack에 return address를 저장한다.
  • 지역변수인 int * data; 값을 저장한다.


malloc을 처리할 때는 메모리 영역을 동적으로 생성하기 때문에 Heap 영역에 생성한다.

32 bits의 공간이 생성되게 된다.

 

Stack도 엄밀히 말하면 주소가 들어간다. 

현재 Heap에 할당된 int의 주소가 1000H를 가리키기 때문에

data는 해당 메모리 영역을 참조하게 된다.

 

다음 줄은 *data = 1; 로 주소의 값을 초기화하기 때문에 힙의 값을 변경하게 된다.


프로세스 구조 : Stack, Heap, Data(BSS, DATA), CODE

Data 영역에 BSS와 DATA 로 구별되는데 차이는 무엇일까?

  • BSS : 초기화되지 않은 전역변수
  • DATA : 초기값이 있는 전역변수

위와같이 초기화된 변수와 초기화되지 않은 변수로 나누어져서 DATA영역에 저장되게 된다.