2010-12-14 3 views

답변

23

간단한 대답 번호 델파이 완전한 가비지 컬렉션 언어, 사용자 정의 형식을 수동으로 할당 및 할당 해제해야하지

. 사용하기 쉽도록 문자열, 동적 배열 및 인터페이스와 같은 몇 가지 기본 제공 유형에 대해서만 자동 수집을 제공합니다.

가베지 컬렉션에 대한 참조 카운팅을 어느 정도 사용하는 인터페이스를 사용할 수 있습니다.

+6

TComponent에서 파생되는 모든 항목이 생성자를 통해 소유자 포인터를 가져 와서 개체가 소유자와 함께 소멸된다는 사실도 중요합니다. –

+0

델파이 가비지는 동적 배열, 문자열과 같은 일부 데이터 유형을 수집합니다. –

+0

Delphi는 인터페이스 수명 (RefCount 구현)과 다른 유형을 관리하는 방법 인 ARC (Automatic Reference Counting)에 익숙합니다. 요즘 가장 최신 델파이 모바일 컴파일러는 객체에 ARC를 도입했습니다. 그것은 컴파일러 지시어 "{$ AUTOREFCOUNT}"에 의해 제어됩니다. 아래 링크를 참조하십시오 : http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Automatic_Reference_Counting_in_Delphi_Mobile_Compilers – Lucas

6

일반적인 가비지 수집에서 런타임은 참조되지 않은 객체를 감지하여이를 파괴하거나 사용하지 않는 리소스를 회수합니다. 아니요, 델파이는 가비지 수집을 가지고 있지 않습니다.

네이티브 Win32 Delphi를 사용하는 경우 가비지 수집에 가장 근접한 것은 문자열, 인터페이스, 변형 및 동적 배열을 비롯한 다양한 참조 카운트 유형입니다. 이러한 유형은 프로그램에서 더 이상 사용되지 않는다고 판단 할 때 자동으로 정리되지만 해당 객체가 현재 범위에 들어가고 나가기 때문에 참조 횟수를 유지함으로써 자동으로 정리됩니다. 소유권의 개념도 있으며, 소유자가 삭제되면 소유 구성 요소가 파괴됩니다.

.Net 용 Delphi를 사용하는 경우 내재적으로 기본 런타임의 가비지 수집이 있습니다.

+2

Delphi.NET이 2 년 이상 사망했습니다. –

+5

예, @User이며, Delphi 7은 10 년 이래로 죽었을거야. 게다가 Delphi 언어는 Prism을 통해 .Net에서 계속 사용할 수 있습니다. –

+3

프리즘 (Prism)은 공유 소스를 시도하지 않으므로, 그 사실을 연속으로 볼 수 없습니다. 상표를 제외하고. –

17

예.

Delphi Win32에는 상자의 가비지 수집기 이 포함되어 있지 않으므로이 질문에 대한 다른 대답은 기술적으로 정확합니다. 그러나 이것이 가능하지 않거나 이미 존재하지 않는다는 것을 의미하지는 않습니다. 델파이의 교체 메모리 관리자 Barry Kelly 덕분에 그것은 (기본적으로 지정되지 않은 객체를 생성하고, GC가 그들을 씹어보고)의 사용을 보여주는 샘플 코드를 포함 2004

에 다시 Boehm garbage collector에 대한 wrapper 완벽한 기능을 구현했습니다. Boehm GC보다 더 발전된 GC가 있지만 이것이 가능하다는 것을 분명히 보여 주며 거의 투명하게 사용할 수 있습니다. gc 유닛을 프로젝트의 uses 절의 맨 앞에 추가하기 만하면됩니다.

내가 시도한 프로젝트에 대해 들어 본 적이 없지만 누군가가 래핑하거나 고급 GC를 포팅하는 것을 막을 수있는 방법은 없습니다. 이 .NET을 기반으로

2

델파이 프리즘

는 가비지 컬렉션을 가지고

표준 델파이

이 쓰레기 수거

1

델파이는 Win32 없음 (네이티브는 Win32)/64에는 가비지 수집기가 없습니다. 그러나 인터페이스를 사용하여 인스턴스를 자동으로 릴리스하도록 Delphi 기본 참조 계산 메커니즘을 활용할 수 있습니다.

가비지 수집기와 참조 계산 메커니즘의 차이점은 순환 참조를 처리해야한다는 것입니다. 즉 A 인스턴스와 B 인스턴스가 서로를 참조하는 경우 수동으로 A 또는 B가 해제 될주기를 해제해야합니다 .