메모리 할당 해제 방법에 대한 질문
안녕하세요 수업 잘 듣고 있습니다.
malloc함수로 운영체제한테 메모리 공간을 받아온다고 배웠습니다. 이 때는 내가 사용할 메모리 크기을 명시하는데
free로 메모리를 해제할 땐 내가 받아온 메모리 크기를 명시하지 않는데 어떻게 컴퓨터는 할당해준 메모리를 정확하게 해제해줄 수 있나요?
따로 어디에 할당해준 메모리 크기를 저장해두는 건가요?
답변 1
1
우선 매우 좋은 질문이라는 점을 말씀드리고 싶습니다. 바람직한 의문입니다.
malloc()으로 메모리를 할당 받을 때 가령 10바이트를 요구했다면 실제로 할당되는 메모리 크기는 그 이상입니다. OS가 관리하는 과정에서 일정 단위로 메모리를 자르는데 이 때, 일정 수준 낭비가 되더라도 그냥 한 덩어리를 할당합니다. 이는 마치 식당에 가서 4인석 테이블에 한 사람이 앉는 것이 4인 테이블을 1인석으로 개조하거나 교체하는 것보다 효율적인 것과 같습니다.
그리고 OS가 '관리'한다는 것은 워터파크 관리자와 비슷한 행동같은 것입니다. 입장하는 고객에게 락커를 배정하고 키를 줍니다. 사용이 끝나 퇴장 시 키를 회수하지만 입장 고객 누가 몇 번을 배정 받았는지 기록하고 있습니다. 즉, 생각하는 것처럼 할당해준 메모리에 대한 크기는 물론 위치정보까지 모두 저장하고 있기 때문입니다.
이와 관련해 더 깊은 내용을 이해하려면 반드시 '가상 메모리'에 대해 알아야 합니다. 그리고 가상 메모리는 운영체제론에서 배울 수 있습니다. C개발자로 혹은 관련 전문가로의 성장을 희망한다면 반드시 운영체제에 대해 공부하실 것을 권합니다.
참고하시기 바랍니다. 😄
scanf("%d\n") 의미
0
20
1
주소 연산자(&) 간접 지정자(*) 반대 개념
0
33
1
Virtual Memory, Memory, Memory mapping tables
0
51
1
샘플코드 출력 오류 발생 질문드립니다
0
63
2
값의 교환에 사용되는 변수의 위치.
0
88
2
메모리 비교에 관한 질문
0
81
2
문자열 Null
0
63
1
C, C++
0
88
2
문자열 입출력 코드 에러
0
60
2
선생님! 120화 2분 50초 질문입니다.
0
67
1
caller 가 메모리 할당 해제를 할 때의 문제점 질문
0
64
2
단축키 맞는지 여부 문의드립니다.
0
60
2
문자열을 사용하는 이중 포인터에 대하여 질문합니다
0
66
1
char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요
0
78
2
용어 설명 필요
0
57
2
stdin, stdout
0
71
2
필수 실습 (최댓값을 반환하는 함수)
0
93
2
아......ㅠㅠ
0
100
2
버퍼 내 엔터
0
72
1
2진수 뺄셈에서 carry-out
0
112
2
union 식별자는 실무에서 보통 어디에서 사용하나요?
0
80
2
필수실습문제 공부법 (진도 vs 복습)
0
104
2
예제파일 다운로드
0
79
2
Visial Studio Code 를 설치해서 사용해도 수업을 따라가는데 지장이 있나요?
0
120
3





