메모리 할당 !?

데이터를 저장할때 메모리 공간을 적절하게 나누는 작업.

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

+ Recent posts