2016-10-31 1 views
0

malloc을 해제하지 않고 메모리를 계속 할당하면 프로그램이 종료 된 후 메모리는 어떻게됩니까? OS가 무료로 제공합니까, 아니면 아직 할당 중입니까?malloc의 메모리 누수

+0

운영 체제에 따라 다릅니다. 어떤 사람들은 그것을 자유롭게하고 다른 사람들은 자유롭게하지 않습니다. 할당 된 것을 항상 명시 적으로 해제하는 것은 메모리가 아니라 모든 * 리소스를위한 것입니다. OS가 프로세스 종료시 모든 리소스를 해제하더라도 일반적으로 좋은 아이디어입니다. –

+0

모든 malloc은 프로세스의 주소 공간의 일부인 가상 메모리 영역의 크고 큰 부분을 만들고 있습니다. 실제 매핑은 메모리에 액세스 할 때까지 발생하지 않으며 프로세스가 종료되면 해당 매핑이 삭제됩니다 – user3109672

답변

0

일반적으로 예. 긴 이야기는 네를 단축 시켰고, 해방되었습니다.

새 프로세스를 만들 때 OS가 특정 프로세스에 대한 메모리 블록을 할당하고 있습니다. 그 메모리 블록에서는 메모리 (함수, 시그니처, 변수 등)를 원하는 방식으로 할당합니다. 이것들은 다음의 도면으로 변환 :

Linux memory map with or without shared libraries

프로세스가 종료되면, 메모리의 전체 블록이 재생된다. 재활용되는 동안 시간이 걸릴 수 있으며 다른 프로세스 시작이 매우 빨라서 다른 블록이 사용됩니다. 그렇지 않으면이 것이 사용됩니다.