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
[56280] Re:Runtime Component 제작 중, 궁금한 사항..
전재득 [jedclub] 1163 읽음    2009-02-26 09:57
혹시 프로그램내에 DLL을 연동해서 사용하는 부분이 있나요? 빌더로 개발 하신 것 중에서요?

Dynamic_RTL을 사용하면 어플리케이션과 DLL들이 모두 같은 RTL 을 사용하게 됩니다. 메모리 관리 유닛을

하나를 서로 돌려가면서 사용하기 때문에 어플리 케이션과 DLL이나 기타 다른 빌더로 개발된 컴퍼넌트?

들과 서로 메모리 할당과 해제가 동일한 RTL 을 통해 이루어 지기때문에 정상적으로 개발 했다면 릭이 발생할

특별한 이유는 없습니다만 Static RTL 을 사용 했다고 하면 각각 DLL이나 어플리케이션 컴퍼넌트 등이 동립적인

RTL을 가지게 됩니다 예를들면 어플리케이션이 A라는 메모리를 할당했다고 하면 DLL에서 A라는 메모리의 제거를

시도 했다면 실패 하는거죠.. 그래서 릭이 발생 할 수 있습니다. 컴퍼넌트도 마찬가지 일거 같네요.. 상호 생성 제거

되는 메모리중 일부가 Static RTL 로 인해 제거할수 없게 된 부분 같아 보입니다. 그부분을 일일이 찾아서 고치던지

아니면 Dynamic_RTL 을 사용하시는게 현명한 방법 같아 보입니다.

정리하자면 컴퍼넌트가 어플리케이션에게 A라는 기능의 생성을 호출 했다면 어플리케이션의 RTL에서 A내부에

특정 메모리를 할당 했을때, 컴퍼넌트가 A내부의 포인터를 직접 사용하고 있다고 하고 컴퍼넌트가 제거 될때

그 부분을 자기가 직접 제거 하려 시도 했다면 서로 다른 RTL로 인해 제거는 실패되고 결국 어플리 케이션에 A

내부에서 생성된 메모리는 제거되지 않게 됩니다.



레이 님이 쓰신 글 :
: 궁금한 사항이 있어서, 이렇게 질문하게 되었습니다.
:
: 런타임 컴포넌트를 제작하고 있습니다.
: 그리고 그 컴포넌트를 사용하는 샘플 프로그램도 제작했습니다.
:
: 코드가드를 이용해서 메모리 릭을 체크하고 있는데,
:
: (BDS 2007로 작업하고 있습니다)
: Dynamic RTL이 Check 된 상태에서는 정상적으로 동작합니다. 코드가드 로그도 정상이라고 나오구요.
:
:
: 그런데, Dynamic RTL을 Uncheck된 상태에서 프로그램을 실행했다 종료하면,
: 메모리릭이 발생합니다.
:
: Resource leak in process : test.exe(6960) - sys\system.pas#2655
:  The Memory block (0x1335120) was never freed
:  The Memory block (0x01335120)[size:28 bytes] was allocated with SysGetMem
:
: 특별히 메모리를 할당하는 부분도 없답니다.
: 컴포넌트 자체가 올라가있다는 이유만으로 저런 현상이 발생하는데요,
: 왜 그럴까요?
:
: #pragma comment(lib, "dsound.lib")
:
: 이 부분이 문제가 될 수도 있나요?
: 다이렉트 사운드를 사용하는 컴포넌트입니다.

+ -

관련 글 리스트
56217 Runtime Component 제작 중, 궁금한 사항.. 레이 1140 2009/02/20
56280     Re:Runtime Component 제작 중, 궁금한 사항.. 전재득 1163 2009/02/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.