malloc() 와 free()에 대해서요..

newlife958의 이미지

malloc 으로 공간을 할당 받고

그할당된 공간을 free 시킵니다.

그런데 이것이 무한히 반복된다면

힙이 다차게된다면 처음에 malloc 한공간을 free 시킨 메모리공간을 다시 할당하게되나요??

즉 free 한 메모리 주소를 malloc 하다보면 다시 재사용 하는지 궁금하네요

프로그래머가 그주소를 직접 대입이 아닌 자동할당할시에요.

어디선가 malloc 했다가 free한공간은 malloc 으로 다시 재사용 안한다는 말을 얼핏 들은거 같아서요.

neogeo의 이미지

상황에 따라 다릅니다. 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.

cinsk의 이미지

malloc 했다가 free한공간은 malloc 으로 다시 재사용 안한다면,
free()란 함수를 만들 이유가 없겠죠.

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

select99의 이미지

재활용안하면..

malloc 사용한 서비스 데몬들은 거의 99%가 다 사망하겠죠..^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.