해결된 질문
작성
·
410
1
안녕하세요 수업 잘 듣고 있습니다.
malloc함수로 운영체제한테 메모리 공간을 받아온다고 배웠습니다. 이 때는 내가 사용할 메모리 크기을 명시하는데
free로 메모리를 해제할 땐 내가 받아온 메모리 크기를 명시하지 않는데 어떻게 컴퓨터는 할당해준 메모리를 정확하게 해제해줄 수 있나요?
따로 어디에 할당해준 메모리 크기를 저장해두는 건가요?
답변 1
1
우선 매우 좋은 질문이라는 점을 말씀드리고 싶습니다. 바람직한 의문입니다.
malloc()으로 메모리를 할당 받을 때 가령 10바이트를 요구했다면 실제로 할당되는 메모리 크기는 그 이상입니다. OS가 관리하는 과정에서 일정 단위로 메모리를 자르는데 이 때, 일정 수준 낭비가 되더라도 그냥 한 덩어리를 할당합니다. 이는 마치 식당에 가서 4인석 테이블에 한 사람이 앉는 것이 4인 테이블을 1인석으로 개조하거나 교체하는 것보다 효율적인 것과 같습니다.
그리고 OS가 '관리'한다는 것은 워터파크 관리자와 비슷한 행동같은 것입니다. 입장하는 고객에게 락커를 배정하고 키를 줍니다. 사용이 끝나 퇴장 시 키를 회수하지만 입장 고객 누가 몇 번을 배정 받았는지 기록하고 있습니다. 즉, 생각하는 것처럼 할당해준 메모리에 대한 크기는 물론 위치정보까지 모두 저장하고 있기 때문입니다.
이와 관련해 더 깊은 내용을 이해하려면 반드시 '가상 메모리'에 대해 알아야 합니다. 그리고 가상 메모리는 운영체제론에서 배울 수 있습니다. C개발자로 혹은 관련 전문가로의 성장을 희망한다면 반드시 운영체제에 대해 공부하실 것을 권합니다.
참고하시기 바랍니다. 😄
답변주셔서 감사합니다.
운영체제에 공부도 필요해 보이네요!