본문 바로가기
다양한 TIP

Linux Heap Memory 영역 해제(진짜 해제)

by 유기농프로그래밍 2019. 10. 23.
반응형

Heap Memory를 사용하여 new, delete를 모두 다 했다.

 

하지만 stl을 사용하는 부분에 넣어왔을 때는 프로세스에서 메모리가 그대로 사용되고, 줄어들지 않았다.

 

OS가 반환하지 않는 것으로 보이는데, 코드상으로 정확히 메모리 해제를 했기 때문에 코드상 문제는 없어보였다.

 

그럼 코드상 leak은 아닌데 캐시하고 있는건가를 보기 위해

 

해당 사이즈만큼 다시 new을 했을 때를 보았다. 결과는 추가적으로 메모리가 늘어나지 않았다.

 

이에 따라 stl에서 메모리를 물고 있는 것처럼 보였다. 이걸 OS가 반환해주지 않는 건지 stl 에서 물고 있는건지 모르겠다.

 

그러던 중 malloc_trim 함수를 찾았다.

 

이 함수는 코드상 해제했지만, 프로세스에서 잡고 있는 메모리를 free memory로 돌려준다.

 

실행중에 테스트를 하려면 아래와 같이 하면 된다.

(PID는 ps -ef를 이용해서 해당 프로세스 pid를 알아오면 된다)

 

gdb --batch-silent --eval-command 'print malloc_trim(0)' -p $PID

 

top으로 메모리가 줄어들었는지 확인해보자.(free로 돌아갔는지)

반응형

댓글