프로그램 실행 도중에 운영체제로부터 메모리를 필요한 만큼만 할당받아 사용하고 사용이 끝난 뒤 반환
- 자원을 효율적으로 관리 가능
- 메모리 영역 중 힙(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 |