malloc() 와 free()에 대해서요..
글쓴이: newlife958 / 작성시간: 월, 2008/12/22 - 5:34오후
malloc 으로 공간을 할당 받고
그할당된 공간을 free 시킵니다.
그런데 이것이 무한히 반복된다면
힙이 다차게된다면 처음에 malloc 한공간을 free 시킨 메모리공간을 다시 할당하게되나요??
즉 free 한 메모리 주소를 malloc 하다보면 다시 재사용 하는지 궁금하네요
프로그래머가 그주소를 직접 대입이 아닌 자동할당할시에요.
어디선가 malloc 했다가 free한공간은 malloc 으로 다시 재사용 안한다는 말을 얼핏 들은거 같아서요.
Forums:
상황에 따라
상황에 따라 다릅니다. malloc 소스를 직접 파보시면 알 수 있지만, 보통 doug lea's malloc 을 자주 쓰므로 doug lea's malloc 알고리즘 분석을 해보시는게 제일 속 편합니다.
제가 이해한바대로 간략히 설명드리면,
1. 일단 free 하더라도 당장은 빈 memeory chunk 에 합쳐지지 않는게 정석.
2. malloc 은 os 에 일정 chunk 를 부탁한뒤 되도록 그것을 쪼개서 사용. ( 사이즈 별로 겠죠? ) - 이때 best fit 인지 가장 먼저 보이는것인지 상황에 따라 다른 알고리즘이 적용됩니다. 그리고 어떤경우엔 free 했던 것에서 가장 비슷한 사이즈의 candidate 를 찾아서 사용하는 경우도 왕왕 있습니다.
3. 메모리가 부족할 경우, 그제서야 chunk 를 정리해보고 free 했던 부분을 다시 합쳐서 용량을 확보.
4. 그래도 부족하면 os 에 더 큰 chunk 를 요청하거나 기존 chunk 뒤에 연달아 메모리 할당 부탁.
재활용 하지 않는건 아니고 상황에 따라 다르다가 일단 대답이 되겠네요.
Neogeo - Future is Now.
Neogeo - Future is Now.
malloc 했다가
malloc 했다가 free한공간은 malloc 으로 다시 재사용 안한다면,
free()란 함수를 만들 이유가 없겠죠.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
재활용안하면.. malloc
재활용안하면..
malloc 사용한 서비스 데몬들은 거의 99%가 다 사망하겠죠..^^
댓글 달기