문제

나는 C++프로그래머 그게 사용을 고려하 D 에 대한 개인적인 프로젝트하고 싶습니다.가 방법을 완전히 사용하지 않는 쓰레기 수집가,그리고 무엇 위험은 이렇게 있다.

내가 알고 관리할 수 있는 내 자신의 메모리를 재정의하여 새로운 삭제를 사용하는 malloc and free,그러나 내가 그랬다면 내가 아니라 쓰레기 수집에서 실행되지 않는 모든.

도움이 되었습니까?

해결책

을 끄 GC 에 D2:

import core.memory;

void main(string[] args) {
    GC.disable;
    // Do stuff.
}

를 사용하는 경우 D1/포보스:

import std.gc;

void main(char[][] args) {
    std.gc.disable;
    // Do stuff.
}

에 D1/Tango:

import tango.core.Memory;

void main(char[][] args) {
    GC.disable;
    // Do stuff.
}

GC 다시 사용할 수 있습 마찬가지로 호출하여 GC.enable(D2 또는 D1/Tango)또는 std.gc.enable(D1/포보스).이러한 수행할 수 있습에서 어떤 시점에서 프로그램입니다.내부적으로는 카운터를 사용하고,실제로 다시 GC 를 호출해야 합니다 enable()한 번에 대한 모든 시간 사용 안 함()이 호출됩니다.

여기에 몇 가지 일을 하지 않으로 장애인 GC 것이기 때문에,메모리 누수가 발생:

  1. 를 사용하지 않는 편안 추가(~=)연산자,또는 사용.길이 속성을 확대하는 배열을 이 할당됩니다.이러한 의존에 GC 을 무료로 이전하는 경우를 재할당,있을 수 있기 때문에 별칭을 다른 곳에서 프로그램입니다.
  2. 를 사용하지 않는 builtin 연관 배열입니다.을 무료로 이해됩니다.
  3. 대부분의 포보고,믿,탱고,설계되었다는 가정하에 쓰레기 수거가 존재합니다.함수에서 이 라이브러리는 메모리 누수가 발생할 수 있습 끔찍하게 사용된 경우 w/o GC.
  4. 를 사용하지 않는 D2 폐쇄와 함께 GC 사용할 수 없습니다.(지 않는 어쨌든,게임.)

는 말했다,동 D 는 설계에 사용할 수 GC 장애인용에는 몇 가지 중요한 조각의 코드(의 종류 중요한 조각을 어디에 실시간 제약 조건이 존재하고 당신은 아마 사용하지 않아야 어떤 형태의 malloc 명시적으로 설계에 대한 실시간 컴퓨팅 든),그것은 크게 설계되었으로는 가정 GC 것 존재합니다.귀하의 경우에,당신은 여전히 사용할 수 있습 GC 에 대한 모든 초기화 물건,etc.만 사용할 때 당신은 당신의 게임의 일부는 실제로야 합니다.

주석으로,GC 및 설명서 메모리를 관리할 수 있습이 공존에 D,및에서 연습할 때 최적화 코드,수동으로 삭제하는 큰 개체와 사소한 수명할 수 있는 결과에서 중요한 속도 향상.이 할 수 있습니다 마찬가지로 C++,를 사용하여 삭제 진술,그리고 안전하는 경우에도 GC 을 사용합니다.이 없을 때 실시간 제약,이것은 당신의 혜택의 대부분 GC 의 대부분과 함께 성능을 수동으로 메모리 관리합니다.

다른 팁

하려면 사용하는 malloc 및 무료 사용 std.c.stdlib.GC 만지지 않을 것입니다. std.gc 모든 물건을 필요한 메모리에 대한 관리를 포함하여 사용 안 함().

GC 나쁜 것은 아닙 하지만입니다.가장하지 않으면 거의 모든 라이브러리에서 어딘가에 있을 것 이 코드에서 어디 메모리하지 않은 명시적으로 삭제하지 않도록 그것은 당신이 영웅을 포함하지만 확인이 있는 경우 몇 가지 중요한 성능 요구 사항입니다.

GC 에게 모든 것을 더 많이 생산 배열 슬라이스 및 생성에 새로운 개체 매개변수는 하지 않고 호출자에 대한 참조가 저장이 어디니다.좋은 코드는 많은 미만의 그것과 함께 GC 코드가 많이 작습니다.

GC 제거할 수 있습으로 교체하는 간단하 래퍼 malloc/무료입니다.

에 관해 읽었는데 D 언어 및 이 사양에서 새로운 것에서 D:

40.더 C

-betterC 는 명령 라인 깃발을 위한 dmd 을 제한하는 컴파일러의 지원을의 특정 런타임 기능입니다.특히,D 프로그램 컴파일이나 라이브러리와 함께 betterC 연결되지 않으로 Druntime.의 사용을 컴파일시 기능이 제한되지 않습니다. https://dlang.org/spec/betterc.html

중 하나의 결과를 사용하여 이 명령은 온라인 플래그를 사용하지 않는 것입 GC 및 언어능 릴레이에요.

40.1 결과

으로 Druntime 사용할 수 있는 많은 D 기능이 작동하지 않습니다.예를 들어:

  • 가비지 컬렉션
  • 실 로컬 저장소
  • 않음 및 ModuleInfo
  • 클래스
  • 내장 스레딩(예:핵심입니다.스레드)
  • 동적 배열(하지만 조각)과 연관 배열
  • 예외
  • 전환과 문자열
  • 최종 스위치
  • 동기화 및 핵심입니다.sync
  • 정적 모듈 생성자 또는 deconstructors
  • 구 deconstructors
  • unittest 에 대한 여러(을 테스트할 수 있습으로-betterC 국기)

또한 참조 https://dlang.org/blog/2017/08/23/d-as-a-better-c/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top