|
릭은 릭이죠 ^^...
이게 전문용어인지 모르겠지만... 지속적으로 늘지 않는 릭에 대해 False Leak 이라고 표현하더군요 ^^...
대개는 할당했으면 지워야 하는게 맞는데 그걸 디자인한 사람의 어떤 의도(?)가 있었다라구..
그냥 그렇게 생각해야죠 뭐 ^^''' 어찌됐든 일부러 귀찮아서 해제를 하지 않은 것은 분명(?)한것 같습니다만..
그리고 전 메일링 리스트 안받고 있는데요 ^^;;; 글 쓰신거 보구 찾아서 확인한거죠.
char *s = new char(100); 이 부분은;;;;;; 뭐 +_+ 가시적인 부분을 그냥 이렇게 처리하는건 좀 그렇겠죠 ㅋㅋ
스마트 포인터를 사용합시다 만쉐!~ ^^:;;;;
WARSHIP 님이 쓰신 글 :
: 포럼에 보니 그걸로 의견이 분분한거 같더라구요.
: 지속적인 메모리할당이 늘어나는것이 아니라 딱 한번뿐이고
: 프로그램 종료시에 운영체제가 알아서 가져가니
: 문제가 될게 없다는 사람도 있었고.
: 그것도 릭은 릭 아니냐. 애초에 없어야 하는거 아니냐 이런사람들도 있고
: 그래서 뭐. 그냥 저도 쓰기로 했습니다. ㅡ,.ㅡ;
:
: 그런데 저도 메일링 리스트를 받고 있긴한데요.
: 메일 관리는 어떻게 하시는지요? -_-;
: 넘 많이 와서리.. OTL
:
: 아. 그런데 메모리 릭이 원래 할당이 지속적으로 이루어지는걸 말하는건가요?
: 전 힙할당해놓고 삭제하지 않는걸 릭이라고 알고있었느데. ㅡ,.ㅡ;
: int main(void)
: {
: char *s = new char(100);
: return 0;
: }
: 위의 것은 그럼 메모리 릭으로 볼수가 없는것인가요?
:
: nicekr.황경록 님이 쓰신 글 :
: : 문제가 있기는 있는걸까요 ^^...
: :
: : 메일링 리스트를 곤곤히... 살펴보니 뭐 디자인 주제에 대해까지 이야기가 들어가는데...
: :
: : 이 클래스를 만든 사람인지 아닌지... 암튼...
: :
: : 정리를 해보면..
: :
: : 프로그램에 있어서 릭(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의 사용법이 미숙한건지 고수분들의 조언 부탁드립니다.
|