코딩 기록

[C언어 강좌] 동적 메모리 할당, 배열 메모리 영역 (malloc sizeof 이해)

[C언어 강좌] 동적 메모리 할당, 배열 메모리 영역 (malloc sizeof 이해)


1. 동적 메모리 할당


시스템으로 부터 메모리를 할당받는다는 것은 시스템에서 사용하고 있지 않은 메모리 영역을 배정받고 이에 대한 주소를 얻는 것이다. 동적 메모리는 "절대" 변수를 통해서 접근할 수 없다. 오로지 포인터 변수에 의해서만이 접근할 수 있다. 포인터 변수에 의해서 접근할 수 있는 영역은 malloc()에 의해서 생성될 수 있으며 세부적인 사항에 들어가기 전에 C프로그램에서의 메모리 구조를 먼저 보도록하자.


- 텍스트 영역, text segment

- 초기화된 데이터 영역, initialized data segment

- 비 초기화된 데이터 영역, Uninitialized data segment

- 스택, stack

- 힙, heap


1.1 텍스트 영역

CPU에 의해서 수행되는 기계어 명령어들이 모여 있는 곳을 지칭한다.

1.2 초기화 된 데이터 영역

제목 그대로 해석하면 무리 없다. 프로그램에서 초기화된 데이터들이 모여 있는 장소이다.


1
int imsi = 100;
cs


변수 imsi는 초기값을 가지고 있으므로 "초기화된 데이터 영역"에 저장되는 것이다.


1.3 비 초기화 된 데이터 영역

말 그대로 초기화하지 않은 변수들에 대한 집합체이다.


1
int imsi;
cs


위의 변수가 함수 바깥쪽에 존재한다면 imsi는 항상 0으로 초기화되며 "비 초기화된 데이터 영역"에 저장될 것이다. 특히 이 부분을 BSS라고 부르는데 "Block Started by Symbol"의 약자이다.


동적 메모리 할당, 메모리 영역[C언어 강좌] 동적 메모리 할당, 배열 메모리 영역 (malloc sizeof 이해)


1.4 스택

간단히 "자동 변수들이 저장된 곳"이라고 할 수 있다. 정확히는 자동 변수들과 그에 따른 환경이 같이 저장된다. 자동 변수는 함수가 호출될 때 생성되고 함수가 끝나면 사라지는 변수이다. 그러므로 함수가 호출될 때 복귀할 수 있는 주소와 호출 함수의 환경이 스택에 저장된다.


1.5 힙

동적 기억장소를 위한 공간이다. 힙은 간단히 말해서 프로그램이 실행되는 중간에 필요에 의해서 할당받는 메모리 영역을 통칭한다고 볼 수 있다. 그러므로 크기가 정해져 있지 않고 유동적이다.


- 일반적으로 힙은 BSS 위쪽에 존재.

- 당연히 스택보다는 아래쪽에 존재.

- 스택과 힙은 정형화되어 있지 않은 공간.


즉, 프로그램의 수행에 따라서 늘기도 하며 줄기도 한다. 이를 그림으로 표현하면 [그림18-1]과 같다.


C언어 동적 메모리 할당 - 전형적인 기억장소 영역[C언어 강좌] 동적 메모리 할당, 배열 메모리 영역 (malloc sizeof 이해), 전형적인 기억장소 영역


C프로그램에서 사용되는 기억장소를 나타내는 대표적인 그림이다. 스택과 힙은 유동적이라는 의미로 화살표가 사용되고 있다. 일반적으로 사용되는 메모리 할당 관련 함수는 세 가지이며 다음과 같다.


1
2
3
4
5
6
7
8
9
#include <stdlib.h>
1. malloc()
    void *malloc(size_t size);
 
2. calloc()
    void *calloc(size_t nobj, size_t size);
 
3. realloc()
    void *realloc(void *ptr, size_t newsize);
cs


ps. 도서 정가제하기 전에는 만원에 팔렸었는데 요즘엔 올랐네요.


다시 체계적으로 배우는 C언어 포인터[C언어 강좌] 동적 메모리 할당, 배열 메모리 영역 (malloc sizeof 이해)


출처 : 다시 체계적으로 배우는 C언어 포인터, 정재은

[C언어 강좌] 동적 메모리 할당, 배열 메모리 영역 (malloc sizeof 이해)


댓글(0)