|
문제가 있기는 있는걸까요 ^^...
메일링 리스트를 곤곤히... 살펴보니 뭐 디자인 주제에 대해까지 이야기가 들어가는데...
이 클래스를 만든 사람인지 아닌지... 암튼...
정리를 해보면..
프로그램에 있어서 릭(leak) 이란 메모리의 해제 없이 메모리 할당이 지속적으로 이뤄지는
것을 말합니다.
*** 포인트는 프로그램의 시작과 끝(lifetime)에 있어 딱 한번 할당이 이뤄지는 것은 메모리의 릭이 아니란 것이죠.
시간에 따라 할당된 메모리가 커지는 일이 없으니 프로그램이 얼마나 오래 지속(run)되는지에 관계없이...
결국 프로그램이 종료될때 메모리의 반환이 이루어진다는 것이죠.
뭐 -_- 이런식의 디자인에 대해 혹자는 미리 알려주었으면 한다... 또는 이런 문제 디자인 패턴에 있어서
뭘 적용해야 한다.. 뭐 이렇게 흘러가고 있는 내용이 메일링 리스트에 있습니다.
이걸 설명한 사람은 False Leak 이라고 이러한 상황을 설명하더군요 ^^..
그럼 결론은... ?
결국 메모리 릭이 아니라는 이야기죠? ^^.....
WARSHIP 님이 쓰신 글 :
: 위의 질문을 올리고 연구해보고 뒤져보고 소스코드 보고 하다가
: 우선 1_33 버젼이 나온걸 알고 그걸로 교체해보았습니다만 안되더군요
: 그래서 다시 뒤져보니 스레드는 DLL링킹을 하라고(vc를 제외하곤) 되어있길래
: RTL 체크 다시 해보니 BC++에서 에러는 안나는군요.
:
: 다만 VC의 경우 릭체커가 첨에 5개의 에러를 뿜더니
: 위와같은 방법으로 해도 2개의 에러를 뿜더군요.(런타임중에 메모리릭 에러)
: 아무래도 BC++의 경우 코드가드가 성능이 좀 떨어져서 못잡는것인지 -_-;
: (VC에서는 컴퓨웨어 데브파트너 어쩌구로 체크 -_-);
:
: ps. 다만 부스트::스레드에 문제가 있는건 확실한것 같습니다.
: www.boost.org 토론장에 가보니 스레드에대한 메모리릭이 리포트 되어있었습니다.
:
:
: WARSHIP 님이 쓰신 글 :
: : 우선 코드가드가
: : 오류 아닌것을 오류라고하는 경우가 있는지 궁금합니다(메모리릭).
: :
: :
: : 제가 boost::thread 를 돌리는 간단한 어플을 테스트중에
: : 혹시나 해서 코드가드를 켜봤더니 스레드가 해제되는시점에서
: : 에러가 나더라구요.(메모리릭) 다만 스레드내에서
: : 동적생성하는 변수는 없구요.
: : 스레드가 해제되는 시점 전에 확실하게
: : thread->join() 으로 종료가 됩니다.
: : 그리고 스레드는 scoped_ptr<boost::thread> 로 관리했습니다.
: :
: : 순서는 대충 이런식입니다.
: : scoped_ptr<boost::thread> th;
: : th.reset( new boost::thread(ptr_function) );
: : ~~
: : ~~
: : th.join();
: :
: :
: : 그런데 자꾸 릭이 뜨니까 당황스럽네요 -_-;
: : 혹시나 해서 팁&트릭 란에서 황경록님이 올리신 소스도
: : 릭이 생기더라구요.
: : 제가 boost의 사용법이 미숙한건지 고수분들의 조언 부탁드립니다.
|