동적 메모리 할당 (Dynamic Memory Allocation)

lsjoon·2024년 2월 16일

C

목록 보기
8/8

동적 메모리 할당

프로그램 실행 도중에 운영체제로부터 메모리를 필요한 만큼만 할당받아 사용하고, 사용이 끝난 뒤 반환

  • 자원의 효율적인 관리 가능
  • 메모리 영역 중 힙(Heap) 영역에 할당됨


brk

프로세스의 데이터 섹션의 끝인 break 지점을 변경
→ 동적으로 할당한 메모리 영역의 크기를 조절 가능

#include <unistd.h>

int brk(EndDataSegment)
char *EndDataSegment;
  • #include <unistd.h> : brk 함수가 포함된 헤더 파일
  • EndDataSegment : break로 지정하고 싶은 값 ( 프로세스의 최대 데이터 값 초과 X )
  • return : 성공시 0, 실패시 -1 리턴


sbrk

프로세스의 데이터 섹션의 끝인 break 지점을 변경하고,
변경되기 이전의 break 주소 ( = 공간이 확장 됐다면, 새로 할당된 메모리의 시작점 )를 반환
메모리를 동적으로 할당하거나, 해제할 때 사용

#include <unistd.h>

void *sbrk(Increment)
intptr_t Increment;
  • #include <unistd.h> : sbrk 함수가 포함된 헤더 파일
  • Increment : 현재보다 확장하고 싶은 사이즈 ( 음수도 가능 )
  • return : 성공시 0, 실패시 -1 리턴


malloc

메모리를 동적으로 할당해주는 함수

#include <stdlib.h>  

void* malloc(size_t size);
  • #include <stdlib.h> : malloc 함수가 포함된 헤더 파일
  • size_t : 동적으로 할당할 메모리 크기
  • return : 성공시 할당한 메모리의 첫번째 주소 리턴, 실패시 NULL 리턴


free

해당 메모리를 더 이상 사용하지 않을 때, 시스템에 반환하는 함수

#include <stdlib.h>  

void free(void *ptr);
  • #include <stdlib.h> : free 함수가 포함된 헤더 파일
  • ptr : 해제하고자 하는 메모리의 포인터

'malloc-free' Example

// --- > example < --- //

void main()
{
	int* arr;
	arr = (int*)malloc(sizeof(int) * 4);  // 배열에 (int * 4)를 동적으로 할당

	arr[0] = 100;
	arr[1] = 200;
	arr[2] = 300;
	arr[3] = 400;

	for (int i = 0; i < 4; i++) {
		printf("arr[%d] : %d\n", i, arr[i]);
	} 

	free(arr);
profile
중요한 것은 꺾여도 그냥 하는 마음

0개의 댓글