데이터 세그먼트
프로그램이 실행시 램에 적재되는데, 메모리 위에 올라오는 프로그램의 내용을 코드 세그먼트 / 데이터 세그먼트로 분류 가능하다.
이 중 데이터 세그먼트의 구조는 아래와 같다.
일단 가장 먼저 주목할 부분은 읽기 전용(Read-Only) Data 부분 입니다. 이전에 상수와 리터럴에 대해서 이야기 할 때 등장하였는데 이 부분에 저장되는 데이터들은 값이 절대로 변경될 수 없습니다. 다시 말해 궁극적으로 보호 받는 부분 이죠. 텍스트 세그먼트라고도함
그다음으로그위에전역변수와정적변수가거처하는데이터영역이있습니다. 그위에바로 힙(Heap) 이라는 영역이 있는데 이 부분에 대해서는 나중에 설명하도록 합시다. 힙 맨 위를 보면 스택(Stack) 이 있습니다. 스택은 지역 변수가 거처하는 곳입니다. 스택의 특징으로는 지역 변수가 늘어나면 크기가 아래로 증가하다가 지역변수가 파괴되면 다시 스택의 크기는 위로 줄어들게 됩니다. 즉, 스택이 늘어나는 방향은 메모리 주소가 낮아지는 방향(아래 방향) 이라 보시면 됩니다.
가장 먼저 읽기 전용(Read Only) 데이터인 str 을 봅시다. str 에는 “Hello, Baby” 라는 리터럴의 주소값이 들어가 있습니다. 따라서, str 의 값을 출력했다면 Read Only 데이터의 위치를 대략 알 수 있겠지요. 여기서는 0x1175a28 로 나옵니다. 예상 대로 출력된 주소값들 중 가장 작게 나옵니다. 왜냐하면 RO data 는 데이터 세그먼트 맨 아래에 위치해 있기 때문이죠.
두 번째로 전역 변수인 global 의 주소값을 살펴보면 str 보다는 살짝 크지만 다른 것들 보다는 많이작다는것을알수있습니다. 이는global이전역변수로데이터영역에위치해있기때문이 죠. 세번째로i를보자면지역변수이기때문에stack에존재하고있습니다. stack의경우 지역 변수를 추가할 수록 메모리 주소가 작아지는 방향으로 추가가 되므로 i 보다 나중에 추가 된 arr 의 주소값이 더 작습니다.
https://blog.naver.com/speciallive/98372211
힙영역이란
메모리의 구조
프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 합니다.
또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요합니다.
따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있습니다.
프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 다음과 같습니다.
1. 코드(code) 영역
2. 데이터(data) 영역
3. 스택(stack) 영역
4. 힙(heap) 영역
다음 그림은 운영체제가 제공하는 메모리 공간을 표현하고 있습니다.
코드(code) 영역
메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부릅니다.
CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다.
데이터(data) 영역
메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역입니다.
데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸합니다.
스택(stack) 영역
메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다.
스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다.
이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 합니다.
스택 프레임에 대한 더 자세한 사항은 C언어 스택 프레임 수업에서 확인할 수 있습니다.
스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출합니다.
이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출됩니다.
스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.
힙(heap) 영역
메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 '그리고 해야만 하는' 메모리 영역입니다.
힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다.
힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.
힙영역에 대해 잘 정리된 블로그
https://wogh8732.tistory.com/178?category=699165
'컴퓨터 시스템 > CSAPP' 카테고리의 다른 글
[ CSAPP / ch11 ] tiny web server, web proxy (0) | 2021.09.27 |
---|---|
C 입력 버퍼와 출력 버퍼 stdin, stdout (0) | 2021.09.24 |
웹 서버 기본 개념 정리(네트워크, TCP/IP , 소켓 프로그래밍) -작성중 (1) | 2021.09.20 |
링킹 (linking) 소스파일과 헤더파일 (0) | 2021.09.14 |
동적 메모리 할당(Dynamic memory allocation), malloc 함수 구현 (malloc lab) (0) | 2021.09.14 |