[C++] 프로그램 종료가 바로 안되는 이유가 뭘까요?
글쓴이: sDH8988L / 작성시간: 금, 2005/10/21 - 8:38오전
얼마 전에 다른 사람이 짜둔 C++ Code를 Modify 해야 될 일이 생겼습니다...
머... 동작은 올바르게 하는데, 문제는 Program 종료가 오래 걸린다는 겁니다...
무슨 말이냐면, main의 return 문장 바로 앞까지 실행하고 나서 한참을 돕니다... 한참이라는 게 몇 분 단윕니다...
실행할 것이 다음에 이어지는 Return 문 밖에 없는데도요...
gdb로 찍어보니 _Destroy... 이런 것들이 나오는 걸로 봐서 아무래도 Garbage Collection을 하는 거 같은데, 무슨 이유로 그렇게나 오래 걸리는 지 모르겠습니다...
혹시 비슷한 증상을 겪으신 분 계십니까?
Forums:
스택에 쌓인 변수들의 파괴자가 먼가 문제가 있는게 아닐까요?조심스러운
스택에 쌓인 변수들의 파괴자가 먼가 문제가 있는게 아닐까요?
조심스러운 예측 ^^
로칼 오브젝트 변수들의 파괴자를 체크해 BoA요~
C++, 그리고 C++....
죽어도 C++
프로그램이 어떤작업을 수행하는지 모르겠지만...
프로그램이 어떤작업을 수행하는지 모르겠지만...
종료시 시간이 걸릴만한 이유라면 서버류 프로그램인 경우에
여러가지 있을 수 있겠죠.
특히 쓰레드를 사용하는 경우, 메인쓰레드에서 각 쓰레드 별로의 안전한 종료를 보장해야 한다거나(보통 네트웍 접속)... 등등이 있을 수 있습니다.
각각의 객체 소멸자들을 체크해 보셔야 겠네요.
valgrind 같은 프로그램으로 한번 돌려보는것도 권장합니다.
(pthread 관련된 정보도 알려주거든요.)
흠...제가 프로그램의 속성에 대해서 너무 적게 정보를 올렸네
흠...
제가 프로그램의 속성에 대해서 너무 적게 정보를 올렸네요...
프로그램은 그냥 Stand-Alone으로 도는 프로그램이구요 시뮬래이터 계통이라고 보시면 됩니다.
그리고 Class를 이용해서 짰지만, 소멸자는 사용하지 않고 있습니다...
물론, 그런 습관이 안 좋다는 건 알지만, 제가 짠 프로그램도 아니고 해서 그냥 쓰고 있습니다만...
그런데, 소멸자가 없다고 해서 프로그램 종료에 그렇게 오랜 시간이 걸린다는 건 좀 이상하지 않나요?
소멸자가 없을 수는 없지요. 명시적으로 정의하지 않으면 컴파일러가 만듭니
소멸자가 없을 수는 없지요. 명시적으로 정의하지 않으면 컴파일러가 만듭니다.
각 멤버의 소멸자를 호출하고, 상속받은 클래스라면 부모 클래스의 소멸자를 호출하는 식이죠.
제 생각도 소멸자에서 뭔가 많은 일을 하는 것이 아닐까 합니다. 클래스 깊은 곳에서
new를 했다면 소멸자에서 delete가 될 텐데, 이런 식의 동적 할당과 해제가 많이
일어난다면 그럴 수도 있습니다.
그리고 별도의 라이브러리를 쓰지 않는 한 garbage collection은 하지 않습니다.
댓글 달기