쓰레드에서 메모리 해제?

hbsnow의 이미지

쓰레드 내에서 malloc로 메모리를 할당하고 어떤 작업을 수행후 할당한 메모리를 해제하려고 free를 했는데...

free를 해도 다른 쓰레드에서 사용이 가능(링크드리스트)한데... 사용이 가능하다면 메모리가 해제 안된거 아닌가요?

그리고 메모리를 할당한 쓰레드가 죽어도 그 메모리는 살아 있었서 다른 쓰레드에서 참조가 가능하더군요!

그 이유가 무언지 궁금합니다.

그리고 최종적으론 쓰레드내에서 할당한 메모리를 완전 해제 할수 있는 방법을 알고싶습니다.

안그러면 계속 메모리가 ... 윽!

김충길의 이미지

해제한 이후에 사용하면 안됩니다.

해제한후 사용했는데 잘 동작하는건 우연찮게 발생한걸겁니다.
아니면 해제후 다른곳에서 할당을 호출하지 않아 아직 그 메모리가
사용되지 않은 경우 이던가

char *p = (char *)malloc (40);
...

free (p);

free 한후에 p는 여전히 값을 가리키고 있습니다. 그렇다고해서
계속 사용할 수 있는 것이 아닙니다. 보통 free(p); p = NULL을
사용하는 편이죠.

screen + vim + ctags 좋아요~

crimsoncream의 이미지

앞에 분이 자세히 설명을 해주셔서 딴 말씀은 필요 없을 것 같고.
혹시 이게 유용할지 모르겠군요.

man pthread_cleanup_push

오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.

hbsnow의 이미지

쓰레드내에서 메모리를 할당하고 free하지 않고 쓰레드가 종료가 됬다면 그 메모리는 어떻게 되남요?

다른 쓰레드에서 사용가능하남요?

만약 다른 쓰레드에서 사용 못한다면... 그 메모리를 전역으로 잡아야 하남요?

crimsoncream의 이미지

hbsnow wrote:
쓰레드내에서 메모리를 할당하고 free하지 않고 쓰레드가 종료가 ㅤㄷㅚㅆ다면 그 메모리는 어떻게 되남요?

다른 쓰레드에서 사용가능하남요?

만약 다른 쓰레드에서 사용 못한다면... 그 메모리를 전역으로 잡아야 하남요?

할당된 메모리는 사용가능 합니다. 다만 refrence가 살아있어야 하니까 전역변수에 assign 하시거나 thread function에 매개 변수로 넘겨 주셔야 하겠죠.

오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.

hbsnow의 이미지

그러니까 free만 하지 않는다면 다른 쓰레드에서 사용가능하시단 말씀이지죠?
주소만 알고 있다면 말이죠!

쓰레드라도 메모리를 free 하면 그 메모리는 사용할수 없다 맞지요?

sliver의 이미지

hbsnow wrote:
그러니까 free만 하지 않는다면 다른 쓰레드에서 사용가능하시단 말씀이지죠?
주소만 알고 있다면 말이죠!

쓰레드라도 메모리를 free 하면 그 메모리는 사용할수 없다 맞지요?


그렇습니다. 쓰레드가 프로세스와 다른 가장 큰 차이점이 바로 주소공간을 공유한다는 것이죠.
mastercho의 이미지

윈도우에서는 원래 쓰레드 방식으로 프로그래밍 해서인지는 몰라도

당연한게 여기는 부분이기도 합니다

스레드에서 할당했다고 해서 스레드 스택에 메모리에 할당된게 아니라

힙메모리에 할당된거기 때문에

어떤 쓰레드에서든 힙에 접근해서 그 메모리를 사용할수 있는것이죠

단지 스레드가 종료하면 처음 할당할때 받았단 힙 주소 포인터를

잃어버리기때문에 ... 다른 쓰레드에 그 주소 포인터를 넘겨줘야 합니다

전역 변수를 사용해도 되고요 아니면 쓰레드를 생성할때 void*형 인자값으로

주어도 됩니다

승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스

댓글 달기

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