• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

[보충] 메모리를 OS에게 반납한다는 표현

22.10.12 11:54 작성 조회수 358

10

  • 강의 노트 작성이 안되어서 여기에 적습니다. 참고하세요.

[보충]

1. 제가 강의에서 메모리를 운영체제에게 반납한다라고 간단하게 말씀드리고 있는데 내부적으로는 조금 더 복잡하고 오해의 여지도 있어서 추가적으로 설명을 드리겠습니다.

일단, 운영체제가 우리의 프로그램에게(보다 구체적으로는 process에게) 메모리를 줄 때는 가상 메모리(virtual memory)라는 개념을 사용합니다. 이때 우리의 컴퓨터에 꽂혀있는 실제 메모리 카드를 사용할지 아니면 (다른 프로그램이 메모리를 쓰고 있어서 실제 메모리 카드의 용량이 부족한 경우에) 하드디스크 같은 다른 저장공간을 사용할지는 OS와 연관된 문제가 됩니다. 우리 프로그램이 받은 메모리가 만약 실제 메모리 카드가 아니라 하드디스크를 가상 메모리로 받은 것이라면 아무래도 처리 속도가 느려지겠지요.

C언어의 free()에 대해서 검색하다 보면 "메모리를 운영체제에게 반납하지 않는다"라는 얘기가 나옵니다. 제가 사용한 "운영체제에게 반납한다"라는 표현과 반대로 보이지만 사실은 같은 얘기입니다. 운영체제 입장에서는 당장 다른데 쓸 일이 없으면 "혹시 네가 다시 필요할 수도 있으니까 가상 메모리는 일단 가지고 있어"라는 라면서 그냥 둔다는 의미입니다. 그렇지만 실제 메모리는 운영체제가 다른 프로그램에게 쓰라고 줘버렸을 수도 있습니다.

C에서는 free()한 메모리를 다시 사용하지 말라고 신신 당부를 하는데요, 만약에 정말로 프로그램이 실제 메모리를 계속 가지고 있는 거라면 주의하라고 할 이유가 없겠죠. 

정리하겠습니다. 저는 여러분께 보다 쉽게 설명드리기 위해서 운영체제가 메모리를 다른데 쓸 수 있다는 의미에서 반납했다라고 말씀을 드렸고 그 의미를 조금 더 설명드렸습니다. 다른 프로그래머들과 의사소통을 하실 때에는 "메모리를 반납했다"라는 표현보다는 "메모리를 해제(deallocate)" 했다라는 표현을 더 많이 사용합니다.

참고자료1. "Even if the pages are still remaining in the ownership of this process, but not being used, the actual RAM can be used by another process. So it's not a big deal if the pages haven't been released for some time."

참고자료2. Learn C The Hard Way p 80, "you use free to return it to the OS so that it can be used by other programs."

참고자료3. "the memory could have been returned to the operating system (a "page" of memory that you're no longer using can be removed from your address space, so there is no longer any memory available at that address - essentially an unused "hole" in your application's memory)." "This is why it is important to make sure you don't use a pointer after freeing the memory it points at."

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2022.10.12

감사합니다!^^