위에 설명에 추가를 하지면, 이런 경우가 memory leak 이 됩니다.
memory 해제할 주소를 읽어 버리기 때문에 계속 메모리 사용량이 증가를 하게 되는 거죠. 단발성 실행이라면 모르겠지만, daemon 이나 계속 실행을 시켜 놓아야 하는 프로그램에서는 memory leak 이 발생하여 시간이 경과하면서 memory 고갈이 발생하게 됩니다.
글쓴이: Stephen Kyoungw... / 작성시간: 화, 2020/07/07 - 10:55오전
서버가 어떤 스냅샷에서 복구된 것 같은데, 그 스냅샷 이후의 제 답변이 날아갔네요.
그때도 적었지만, 툴을 써서 memory leak을 확인할 수 있습니다. 꽤 여러 가지 있을 텐데 valgrind 같은 게 있고요.
그 다음으로는 malloc, calloc, free 같은 메모리 매니지먼트 관련 함수를 호출하면, 프로그래머가 구현해 놓은, 이를테면, my_malloc, my_calloc, my_free 등을 호출하게끔 하는 트릭이 있습니다. 그 안에서 실제 malloc, calloc, free 등을 부르면서 메모리 할당/해제 여부를 추적하는 방식이 있습니다.
그외에도 아마 garbage collector 구현이 있을 것 같은데, 그것까진 저도 잘 모르겠습니다.
저도 잘 모르는데
위와 같은 경우는 p가 가리키고 있는 메모리 주소를 null로 바꾼거지 메모리 해제가 된게 아닙니다.
자세한것은 아랫분이 답해주실거에요
감사합니다~
감사합니다~
malloc()으로 할당받은 메모리의 주소를 p가
malloc()으로 할당받은 메모리의 주소를 p가 저장하고있었습니다.
그런데 p=NULL 한순간 p가 다른값으로 바뀌면서 이전에 받았던 할당받은 메모리 주소를 까먹게 된거죠.
이건 메모리 반환한게 아니라, 힙 메모리 주소를 기억하고있던 p의 내용을 NULL로 바꾼겁니다.
시스템은 아직 malloc()으로 할당받은 힙 메모리를 사용중이라고 인식할겁니다.
p는 그냥 값을 저장하기 위한 공간에 불과합니다. 위 코드에서는 "힙 메모리"를 기억하기 위해 사용했던거구요.
어떻게 말해야할지 몰라서 막 썻는데 도움이 되었으면 좋겠습니다.
요즘은 알아서 해제해주는지 모르겠네요.. 그런데 C에서 NULL이 가능한가요?
넵 c언어에서 NULL가능하더라구여
넵 c언어에서 NULL가능하더라구여
자세한 답변 감사합니다
위에 설명에 추가를 하지면, 이런 경우가 memory
위에 설명에 추가를 하지면, 이런 경우가 memory leak 이 됩니다.
memory 해제할 주소를 읽어 버리기 때문에 계속 메모리 사용량이 증가를 하게 되는 거죠. 단발성 실행이라면 모르겠지만, daemon 이나 계속 실행을 시켜 놓아야 하는 프로그램에서는 memory leak 이 발생하여 시간이 경과하면서 memory 고갈이 발생하게 됩니다.
며칠 전에
서버가 어떤 스냅샷에서 복구된 것 같은데, 그 스냅샷 이후의 제 답변이 날아갔네요.
그때도 적었지만, 툴을 써서 memory leak을 확인할 수 있습니다. 꽤 여러 가지 있을 텐데 valgrind 같은 게 있고요.
그 다음으로는 malloc, calloc, free 같은 메모리 매니지먼트 관련 함수를 호출하면, 프로그래머가 구현해 놓은, 이를테면, my_malloc, my_calloc, my_free 등을 호출하게끔 하는 트릭이 있습니다. 그 안에서 실제 malloc, calloc, free 등을 부르면서 메모리 할당/해제 여부를 추적하는 방식이 있습니다.
그외에도 아마 garbage collector 구현이 있을 것 같은데, 그것까진 저도 잘 모르겠습니다.
댓글 달기