[CS] Stack과 Heap

김용현·2023년 7월 13일
0

[cs]

목록 보기
1/5

프로세스 메모리 구조

일반적으로 사용하는 프로세스의 메모리 구조는 다음과 같이 이루어져 있습니다.

이미지 출처 : https://st-lab.tistory.com/198

Text 영역

프로그램에 코드가 저장되는 영역입니다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 해석, 실행하게 됩니다.

Data 영역

전역 변수, static 변수가 저장되는 부분입니다. 함수나 객체와 같이 범위가 저장되지 않은 변수들은 Data 영역에 저장되어 사용됩니다.

Stack 영역

프로그램이 함수를 호출하면, 함수 안에서 정의된 지역 변수, 매개 변수의 값이 저장되는 위치입니다. Stack 영역에서의 데이터는 프로그램이 자동으로 지정하여 사용하게 됩니다. 함수의 호출이 완료되면, stack 영역에서 데이터가 사라지게 됩니다.

Heap 영역

동적으로 할당되는 영역으로 malloc(), new() 호출로 생성된 데이터들을 저장합니다. 이 부분은 프로그래머가 직접 할당/해제하는 부분입니다.

Stack과 Data

stack 영역과 data 영역을 구분한 가장 큰 이유는 역할의 분배

  • stack 영역 : 함수의 흐름을 관리
  • Data 영역(+ BSS 영역) : 전역 변수, static 변수를 관리
  • 만약에 한 프로세스가 여러 개의 스레드를 갖는다면, 각각의 스레드는 자신만의 Stack 영역을 가진다.
    • 스레드 내에서 수행되는 함수의 흐름을 각각 관리하기 위함

Data와 스레드

Data 영역의 공유

각각의 스레드는 자신만의 Stack 영역을 갖지만, Data 영역은 공유한다.
각각의 스레드가 Data 영역의 동일한 내용을 공유함으로써 메모리를 절약할 수 있음

참조

profile
함께 일하고 싶은 개발자가 되기위해 노력 중입니다.

0개의 댓글