태그: BSS

A) 함수를 만들다보니 프로그램을 실행할 때 메모리 구조를 알고 싶어졌어. B) 코드와 전역 변수를 위한 메모리 크기는 컴파일 시점에 결정해. 함수를 호출하면 지역 변수와 기타 메모리는 런 타임에 스택에 잡혀. C) 아직 배우지 않았지만 런 타임에 메모리를 동적으로 할당받으면 힙에 잡히지.

이번에는 간단하게 프로그램 개발자들이 알아야하는 프로세스(실행 중인 프로그램) 메모리 구조를 알아볼게요.

프로세스의 주요 메모리는 크게 Text, Data, BSS, Stack, Heap으로 구분할 수 있어요.

프로그램의 코드는 Text 영역에 잡히고 전역 변수는 Data 영역에 잡히죠.
이 두 개의 영역의 메모리 크기는 컴파일 시점에 결정해서 프로세스 동작 중에는 크기가 변하지 않아요.
그런데 함수 호출에 의한 지역 변수나 호출 처리에 필요한 메모리는 런 타임(프로세스 동작 시)에 잡히죠.
피 호출 함수가 끝나면 호출한 함수로 복귀하고 자신의 메모리를 해제하기 위해 Stack에 잡혀요.
이 외에 앞으로 배울 동적 메모리 할당 함수 호출하면 Heap 메모리에 잡히죠.

Text 메모리에는 프로그램에서 수행할 코드가 로딩되는 메모리 영역으로 변하지 않는 부분이예요.
Data 메모리와 BSS 메모리는 전역 변수(함수 외부에 선언한 변수로 프로그램 전체 영역에서 사용 가능)와 정적 변수(static 키워드를 명시하여 선언한 변수)를 위한 영역이죠.
Data 메모리는 초기값을 설정한 전역 변수와 정적 변수를 위한 영역이예요.
BSS 메모리는 초기값을 설정하지 않은 전역 변수와 정적 변수를 위한 영역으로 0으로 자동 초기화해 줘요.

Stack 메모리는 지역 변수와 프로그램 수행 흐름을 위한 데이터를 임시로 저장하는 영역이예요.
Heap 메모리는 프로그램 동작 중에 동적으로 메모리를 할당하여 사용할 수 있는 영역이예요.
동적 메모리 할당에 관한 사항은 뒤에서 배울 내용이죠.

따라서 Text, Data, BSS 영역은 프로그램 로딩할 때 크기를 결정하며 수행 중간에 크기 변화는 없어요.
하지만 Stack과 Heap 영역은 프로그램 수행 중에 메모리 크기가 변해요.

이보다 더 자세한 내용은 Unix System Programming 관한 책을 통해 학습하세요.

프로세스 메모리 구조, Text 메모리에 프로그램 코드, Data 메모리에 초기화한 전역 및 정적 변수, BSS 메모리에 초기화하지 않은 전역 및 정적 변수, Heap 메모리에 동적 메모리 할당, Stack 메모리에 지역 변수 등


[C언어 무료 동영상 강의] 53. 프로그램 생명 주기, 54. 프로세스 메모리 구조, 55. 프로그램 동작 원리