2016-04-19 3 views
2

SharedFreeList hat die richtige Methode, aber ich sehe nicht, wie alle Knoten eines FreeList zu befreien:Wie kann ich alle Artikel einer FreeList freigeben?

module runnable; 

import std.experimental.allocator.building_blocks; 
import std.experimental.allocator.mallocator; 
import std.experimental.allocator; 

shared SharedFreeList!(Mallocator, 0, unbounded) heap1; 
FreeList!(Mallocator, 0, unbounded) heap2; 

shared static ~this() 
{ 
    heap1.deallocateAll; // OK 
} 

static ~this() 
{ 
    heap2.deallocateAll; // no prop deallocateAll for... 
} 

Während dieses Beispiel keinen Sinn, ich kann das gleiche in einer Klassendestruktor tun wollen. Mit bestimmten statischen Parametern scheint FreeList.deallocateAll deaktiviert zu sein, jedoch muss es eine Möglichkeit geben, alle Knoten in der Liste zu entfernen, richtig?

Antwort

4

nach DOC:

nur definiert, wenn ParentAllocator deallocateAll definiert. Wenn ja, leitet es weiter und setzt die Freelist zurück.

Sie verwenden Mallocator, die nicht deallocateAll haben, so dass Sie es nicht verwenden können. Aber SharedFreeList hat eigene Implementierung von deallocateAll.

So würde ich wahrscheinlich ein Problem auf https://issues.dlang.org erstellen. Denn ich glaube, die gleiche Methode könnte auch für FreeList implementiert werden.

+0

das klar, stimme ich zu. –

+0

Ich habe nicht auf die Implementierung von 'FreeList' geschaut, aber es könnte nur die freien Objekte verfolgen und nicht die Objekte, die zugewiesen wurden. In diesem Fall wäre es nicht möglich, 'deallocateAll' zu implementieren. –

Verwandte Themen