C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[52463] [자답] TServerSocketThread 쓰레드 메모리 누수 문제....
역삼골 [saonara] 1479 읽음    2008-02-28 17:19
Triple-DES 연산때문에 rand()함수를 호출해서 난수를 생성하는데
rand() 호출할때마다 메모리가 증가하네요.
이 부분을 막으니 메모리 증가는 없습니다.

//---------------------------------------------------------------------------
//Get Random Function
//---------------------------------------------------------------------------
void __fastcall TServerSocketThread::SRand(BYTE* bRandValue)
{
    int nPreRand = 0;
    for(int nCnt = 0; nCnt < 8; nCnt++)
    {
        nPreRand = (int)GetTickCount() + (int)ClientSocket->Handle;
        bRandValue[nCnt] = (BYTE)((nPreRand / (nCnt + 3)) % 255);
    }
}
위와같이 난수생성 함수 만들었습니다.
난수 테이블을 만들렸고 했지만 귀찮아서...^^
이렇게 하니 메모리 문제는 없습니다.

믿거나 말거나지만....--;;;;

또한 Thread에서 외부 CPP에서 함수를 호출하는데
이상하게 메모리가 증가하네요.
그래서 외부 함수를 Thread내로 옮기니 메모리 증가는 없습니다.

믿거나 말거나지만...

Thread Execute() 함수를 끝낼때
Synchronize(Terminate); //Terminate();
를 호출하지 않으니 쓰래드가 4000개 정도 생성된후 생성되지 않습니다.
이 부분은 쓰래드 한개당 1MB 스택이 할당되서 4G 이상은 생성되지 않는것으로 보입니다.
아무래도 쓰래드 종료시 free가 제대로 않되는거 같은데요.....

그래서
try
{
...
}
__finally
{
...
Synchronize(Terminate);
}
했더니 20000개 까지 테스트 해봤는제 문제 없습니다.
(장성호님글 참조하세요. http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=52294)

믿거나 말거나지만...

혹시 저와 같은 고민하시는분 계시면 위에 부분 코드 확인해보세요.
아...몇일동안 메모리때문에 고생했는데 속이 후련하네요. ^^;;;;

도움주신분들께 감사하다는 인사드립니다. ^^

+ -

관련 글 리스트
52463 [자답] TServerSocketThread 쓰레드 메모리 누수 문제.... 역삼골 1479 2008/02/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.