본문 바로가기

CS 기초

동적 메모리 할당(Heap, sbrk, malloc, free)

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

  • 자원을 효율적으로 관리 가능
  • 메모리 영역 중 힙(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 : 해제하고자 하는 메모리의 포인터

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);

'CS 기초' 카테고리의 다른 글

메모리 단편화 (Memory Fragmentation)  (0) 2024.02.22
그리디  (2) 2024.01.25
SSH  (0) 2023.03.20
AppArmor & apt  (0) 2023.03.20
파일시스템(정리 필요)  (0) 2023.03.20