wir ein Stück Code, der TBB nutzt Aufgaben zum Laichen einige Verarbeitung auszuführen dies die folgenden TBB-Code erfolgt über die TBB-Thread-Pool zu initialisieren (die Anzahl der Kerne entsprechen):TBB Laich Aufgabe Speicherleck
tbb::task_scheduler_init(8);
dann für jede Aufgabe, die wir zum laichen wollen wir den folgenden Code verwenden (wo Task aus der TBB :: Task-Klasse abgeleitet ist):
task = new (tbb::task::allocate_root()) MainTask(theAction, theOutputData);
tbb::task::enqueue(*task);
Wenn wir unseren Code ausführen starten wir ab einer bestimmten Menge mit von Speicher und dann wie das Programm ausführt und neue Aufgaben hervorbringt, wie oben beschrieben, der Speicher Die Nutzung nimmt mit der Zeit allmählich zu. In 40 Minuten der Ausführung erhöht es von 12KB zu 213KB. Dies ist trotz allem kein Ergebnis unseres Verarbeitungscodes und scheint darauf zurückzuführen zu sein, dass TBB den Speicher nicht von der TBB-allocate_root-Aufgabe freigibt, die wir erstellen, wenn sie ihre Ausführung so beendet haben, wie wir es erwarten.
Warum passiert das? Gibt es noch etwas, das wir tun müssen, um dieses Problem zu lösen, oder gibt es eine alternative Möglichkeit, die TBB-Aufgaben zu spawnen, ohne den Ansatz allocate_root zu verwenden, der dieses Problem löst?