메모리 할당 !?
데이터를 저장할때 메모리 공간을 적절하게 나누는 작업.
Background Knowledge
Program과 Process 차이점 !
프로그래머가 소스코드를 작성하여 빌드하여 나온 실행 파일을 Program이라고 한다.
원시코드(.c) - > 목적 파일(.obj) - > 실행파일 (.exe) ( build 과정)
그런데 실행파일에 있는 명령들은 CPU가 직접 실행할수 없어 먼저 운영체제에서 실행파일의 명령들을 읽어서 메모리에 재구성하는데 이것을 Process 라고 한다.
Process는 각 segment로 이루어져 있는데 명령어뿐만아니라 입력한 데이터를 기억하는 메모리 공간도 포함하고 있다.
- Code Segment - 실행 파일이 실행되어 프로세스가 구성되면 기계어 명령어들이 복사 되는 곳.
- Data Segment - 프로그램이 시작해서 끝날때 종료되는 데이터들이 저장되는 곳.
- Stack Segment- 임시 데이터를 저장하는 곳.
정적 메모리 할당
- 정의 - 컴파일러가 코드를 기계어로 번역하는 시점에 변수를 저장할 메모리 위치를 배정하는 것을 정적 메모리 할당(Static Memory Allocation) 이다.
- tip - 정적 메모리 할당은 Stack이라는 자료구조의 한 종류 이며 두개의 포인터로 많은 양의 데이터를 효과적으로 관리하는 이론이다.
- 정적 메모리의 크기는 1 Mbyte가 한계이다. char data[1024*1024] ;
동적 메모리 할당
- 정의 - 큰 메모리를 사용할수 있도록 Heap이라는 공간에 메모리 위치를 배정하는 것.
- tip - Gbyte 단위까지 할당할수 있고, 변수 선언을 통해 사용자 원하는 시점에 공간을 생성하고 해제 할수 있다. 사용시 전처리기 코드를 추가해야한다 #include <malloc.h>
함수 원형 : void *malloc(size_t size ) //양수만 고려 void * 형식으로 반환되는 함수
int *p = (int *) malloc(100) //100바이트를 4바이트씩 25개 그룹으로 사용
free(p) // 메모리 동적할당 해제
- tip - 만약 동적할당에 실패하는경우 malloc 함수는 NULL을 반환한다.
'C_Language' 카테고리의 다른 글
포인터(기초1)! (0) | 2019.12.05 |
---|---|
stimpack C언어 시작하기 (0) | 2018.11.22 |