동적 메모리 할당: 실행 중에 메모리를 할당
heap공간의 메모리 영역이 할당됨
- 명시적 할당: 프로그래머가 직접 메모리 할당 관리
예) C의 malloc & free - 묵시적 할당: 시스템이 메모리 할당 관리
예) JAVA의 가비지 컬렉션
C의 동적 메모리 함수
- malloc(size): size만큼의 동적 메모리 할당
성공하면 메모리 블록 포인터 리턴
실패하면 Null 리턴 후 errno 설정 - free(포인터): 포인터에 있는 공간을 할당 해제
malloc 등의 동적 메모리를 쓰고 나서 반드시 해야됨. (안하면 계속 공간 차지 -> 메모리 누수) - 기타
calloc: 블록을 할당하고 0으로 초기화함
realloc: 이전에 할당된 블록의 크기 변경
sbrk: 힙을 늘리거나 줄이기 위해 사용
메모리 할당의 제약
- 할당된 블록의 수, 크기 제어 불가능 & 할당 요청에 즉시 응답해야 함. (요청하면 무조건 따라야 함.)
- 가용메모리에 블록을 할당해야 함. (malloc으로 할당된 공간 사용 불가)
- 한번 malloc된다면 그 부분은 이동 불가
-> 메모리 할당의 제약으로 메모리 효율 하락
단편화: 메모리 공간이 비효율적으로 사용되는 현상
- 내부 단편화: 실제 사용 공간보다 할당된 공간이 클 때 (할당받은 것 다 안씀) -> 고치기 간단
예) 패딩을 위한 빈 공간, 자료 특성 고려하지 않은 일괄적 할당 - 외부 단편화: 힙 메모리는 충분하나 할당된 공간으로 인해 공간이 작게 찢어져 큰 가용메모리가 없음 -> 향후 메모리 상황이 어떻게 될 지 모르므로 함부로 이동 못함 -> 고치기 어렵
예) 할당된 블록: ■ 할당되지 않은 블록: □
p1 = (int)malloc(4*sizeof(int));
p2 = (int)malloc(3sizeof(int));
p3 = (int)malloc(5*sizeof(int));
여기까지 상태: ■■■■■■■■■■■■□□
-----------------------------------------------
free(p2);
여기까지 상태: ■■■■□□□■■■■■□□
-----------------------------------------------
p4 = (int)malloc(4sizeof(int)); //문제 발생(공간이 모자름)
실제로 힙 공간엔 크기 5의 여유가 있으나, 크기 4의 데이터를 저장 못함.
728x90
반응형
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조](26)[가상메모리 동작] (0) | 2025.03.05 |
---|---|
[컴퓨터 구조](25)[가상 메모리] (0) | 2025.03.04 |
[컴퓨터 구조](24)[프로세스 생성 & 종료] (0) | 2025.03.03 |
[컴퓨터 구조](23)[프로세스] (0) | 2025.02.28 |
[컴퓨터 구조](22)[제어흐름변경] (0) | 2025.02.27 |