malloc으로 많은 갯수의 메모리 를 잡았을때..
글쓴이: bxhs / 작성시간: 목, 2004/01/29 - 5:57오후
시스템에 어떤 영향을 주는지 정확하게 아시는 분 계신지..
리눅스에서도 상관없고 윈도우에서도 상관없습니다.
예를 들어 100byte짜리 메모리단위들을malloc으로
100만개 정도 잡았다면, 메모리 100메가 정도 잡힌 셈인데..
대충 생각하기에는
하나의 버퍼로 100메가 잡은 것보다 실재론 더 많은 메모리를
못쓰게 만들것 같기도 하고..
malloc속도도 후반으로 갈수록 속도가 떨어질것 같군요..
운영체제 공부하신분들.. 가르침을 바랍니다.
Forums:
답변이 올라오지 않기에, 좀 허접한 답변이나마 올려봅니다.일단 1
답변이 올라오지 않기에, 좀 허접한 답변이나마 올려봅니다.
일단 100만번 돌면서 100바이트씩 할당할 경우 한번에 100메가를 할당할 경우보다 더 많은 메모리를 사용하게 됩니다.
이것에 관한 내용은 예전에 kldp 게시판에 pynoos님이 친절하게 설명해주신 강좌가 있습니다.
http://bbs.kldp.org/viewtopic.php?t=1244
참고하시면 많은 도움이 될듯 싶습니다.
malloc의 속도가 후반에 갈수록 떨어진다는 말씀은...
테스트를 해보지 않아서 잘은 모르겠지만, 적어도 그럴 일은 없을듯 싶습니다.
정확한것은 공룡책을 보시면 아시겠지만, 간단하게 정리를 한다면..
메모리 할당과 같은 작업은, 사용자가 요청하는 크기와 현재 메모리의 사용되지 않고 분할되어 있는 영역과의 관계를 이용하게 되는데,
이때 사용되지 않고 있는 부분을 저장하고 있게 되는데, 이 저장 방법이 단편화된 크기를 오름차순으로 정렬할 경우를 best-fit라 부르고, 내림차순으로 정렬할 경우 worst-fit라고 부릅니다.
다음과 같이 사용되지 않은 메모리 영역이 있다고 가정해 봅니다.
이것을 각 방법으로 나열할 경우,
위와 같이 메모리가 정렬될 것입니다.
이때 사용자로부터 10바이트의 메모리를 할당해 달라는 요청이 들어온다면, 각 방법에 따라 어떤 결과나 나올까요?
best-fit 방법은 2 4 5 6 9 12 총 6번의 탐색끝에 적당한 메모리를 할당시킬 수 있게 됩니다.
그럼 10바이트를 할당하고 난 후, 조각난 2바이트를 다시 넣어두어야 하지요?
10바이트를 할당한 후 모습은 이렇게 변하겠네요.
이제 worst-fit의 경우를 보면,
가장 먼저 검색해 보는 크기는 21바이트로써, 한번에 탐색이 가능해 지는군요.
그리고 조각난 것을 다시 넣어두게 되면, 최종적인 모습은
와 같이 됩니다.
어느것이 더 효율적으로 보입니까? 만일 메모리 단편화가 너무 심하여, 사용자가 원하는 크기만큼의 여유분 메모리가 존재하지 않는다면, best-fit방법의 경우 전 단편화된 메모리를 모두 탐색해 보아야 알 수 있을 것입니다.
반면에 worst-bit의 경우엔 언제나 1번의 탐색으로 가능해 지는군요.
음.. 제가 알기로 worst-fit 방법을 사용하고 있는것으로 압니다.
그러므로 후반부로 갈수록 느려진다는 의견은 테스트상의 문제가 아닐까 생각됩니다.
glibc에서 malloc()은 Doug Lea의 dlmalloc()에
glibc에서 malloc()은 Doug Lea의 dlmalloc()에 변형을 가한 것을 쓰고 있습니다. (확인 안해봤음)
dlmalloc()은 "best-first with coalescing"을 쓰며, 자세한 것은 http://gee.cs.oswego.edu/dl/html/malloc.html를 참고하시고, malloc implementation에 관한 사항은 http://www.cs.colorado.edu/~zorn/Malloc.html를 보시기 바랍니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기