쓰레드에서 메모리 해제?
글쓴이: hbsnow / 작성시간: 월, 2003/08/18 - 11:24오전
쓰레드 내에서 malloc로 메모리를 할당하고 어떤 작업을 수행후 할당한 메모리를 해제하려고 free를 했는데...
free를 해도 다른 쓰레드에서 사용이 가능(링크드리스트)한데... 사용이 가능하다면 메모리가 해제 안된거 아닌가요?
그리고 메모리를 할당한 쓰레드가 죽어도 그 메모리는 살아 있었서 다른 쓰레드에서 참조가 가능하더군요!
그 이유가 무언지 궁금합니다.
그리고 최종적으론 쓰레드내에서 할당한 메모리를 완전 해제 할수 있는 방법을 알고싶습니다.
안그러면 계속 메모리가 ... 윽!
Forums:
해제한 이후에 사용하면 안됩니다.해제한후 사용했는데 잘 동작하는건
해제한 이후에 사용하면 안됩니다.
해제한후 사용했는데 잘 동작하는건 우연찮게 발생한걸겁니다.
아니면 해제후 다른곳에서 할당을 호출하지 않아 아직 그 메모리가
사용되지 않은 경우 이던가
char *p = (char *)malloc (40);
...
free (p);
free 한후에 p는 여전히 값을 가리키고 있습니다. 그렇다고해서
계속 사용할 수 있는 것이 아닙니다. 보통 free(p); p = NULL을
사용하는 편이죠.
screen + vim + ctags 좋아요~
앞에 분이 자세히 설명을 해주셔서 딴 말씀은 필요 없을 것 같고.혹시
앞에 분이 자세히 설명을 해주셔서 딴 말씀은 필요 없을 것 같고.
혹시 이게 유용할지 모르겠군요.
오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.
그렇다면...
쓰레드내에서 메모리를 할당하고 free하지 않고 쓰레드가 종료가 됬다면 그 메모리는 어떻게 되남요?
다른 쓰레드에서 사용가능하남요?
만약 다른 쓰레드에서 사용 못한다면... 그 메모리를 전역으로 잡아야 하남요?
Re: 그렇다면...
할당된 메모리는 사용가능 합니다. 다만 refrence가 살아있어야 하니까 전역변수에 assign 하시거나 thread function에 매개 변수로 넘겨 주셔야 하겠죠.
오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.
..
그러니까 free만 하지 않는다면 다른 쓰레드에서 사용가능하시단 말씀이지죠?
주소만 알고 있다면 말이죠!
쓰레드라도 메모리를 free 하면 그 메모리는 사용할수 없다 맞지요?
Re: ..
그렇습니다. 쓰레드가 프로세스와 다른 가장 큰 차이점이 바로 주소공간을 공유한다는 것이죠.
윈도우를 생각하시면 편할텐데요..
윈도우에서는 원래 쓰레드 방식으로 프로그래밍 해서인지는 몰라도
당연한게 여기는 부분이기도 합니다
스레드에서 할당했다고 해서 스레드 스택에 메모리에 할당된게 아니라
힙메모리에 할당된거기 때문에
어떤 쓰레드에서든 힙에 접근해서 그 메모리를 사용할수 있는것이죠
단지 스레드가 종료하면 처음 할당할때 받았단 힙 주소 포인터를
잃어버리기때문에 ... 다른 쓰레드에 그 주소 포인터를 넘겨줘야 합니다
전역 변수를 사용해도 되고요 아니면 쓰레드를 생성할때 void*형 인자값으로
주어도 됩니다
승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스
댓글 달기