malloc 후 free되는데 어느정도의 시간이....

Jeong Kwanhee의 이미지

안녕하세요?

malloc에 대한 문의 드립니다.

malloc을 수행하고 free를 수행하는 행위를 반복적으로 하고 있습니다.
free를 통해 메모리를 반납하면 어느 정도의 시간 후, 사용가능해지는지요? 바로 가능해지는건지요??

왜냐하면,,,
보드에서 테스트를 해보고 있는데,
처음 malloc을 했을 때, 주소가 cb702000이고 free를 한 후,
다시 malloc을 했을 때는 주소가 cba02000
그다음 free 후, malloc하면, cbe02000 이렇게 할당이 됩니다.
.
.
.
몇번 하다보니 cbe02000 값까지 되네요...

만약 free로 메모리 해제하는데 시간이 걸린다면, 자주 malloc을 수행하는 경우는 array를 쓰는게 더 효율적인가요?

pastime의 이미지

이용 중인 malloc의 구현에 따라 동작이 달라질 수 있겠지만
일반적인 상황이라면 바로 사용 가능해 질 것입니다.

glibc에서 사용하는 ptmalloc2의 경우
memory (chunk)가 free()되면 내부 캐시 내에 포함되어
다음번에 동일한 크기의 요청을 바로 처리하도록 되어 있습니다.
이에 대한 overhead는 (극히) 적다고 볼 수 있습니다.

단 memory chunk의 크기가 일정 크기 이상이라면
free 시에 인접한 (free) chunk와 merge를 시도하기 때문에
약간의 overhead가 더 추가됩니다.

하지만 (아마도) 지금 질문하신 내용은 kernel의 kmalloc/kfree에 대한 것 같은데
kmalloc을 처리하는 slab 할당자의 경우에도
free된 메모리를 (array_cache라는 자료 구조를 통해) 각 cpu별로 캐시해두고
다음번 요청을 바로 처리하도록 되어 있습니다.

일반적으로 동적 메모리를 (매우) 자주 할당/해제한다면
이를 위한 전용 함수를 작성하는 것을 고려해 보는 것이 좋습니다.
(리눅스 커널의 경우에는 kmem_cache_xxx 류의 함수들을 이용할 수 있으니 간단합니다.)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.