Ich lese ein Buch über das Gedächtnis als Programmierkonzept. In einem der späteren Kapitel verwendet der Autor das Wort Arena stark , definiert es jedoch nie. Ich habe nach der Bedeutung des Wortes und seiner Beziehung zum Gedächtnis gesucht und nichts gefunden. Hier sind einige Zusammenhänge, in denen der Autor den Begriff verwendet:
"Das nächste Beispiel für die Serialisierung beinhaltet eine Strategie, die als Speicherzuweisung aus einer bestimmten Arena bezeichnet wird ."
"... dies ist nützlich, wenn Speicherlecks behandelt oder aus einer bestimmten Arena zugewiesen werden ."
"... wenn wir die Erinnerung freigeben wollen, werden wir die gesamte Arena freigeben ."
Der Autor verwendet den Begriff über 100 Mal in einem Kapitel. Die einzige Definition im Glossar lautet:
Zuweisung aus der Arena - Technik, bei der zuerst eine Arena zugewiesen und dann die Zuweisung / Freigabe innerhalb der Arena durch das Programm selbst (und nicht durch den Prozessspeichermanager) verwaltet wird; Wird zur Komprimierung und Serialisierung komplexer Datenstrukturen und Objekte oder zur Speicherverwaltung in sicherheitskritischen und / oder fehlertoleranten Systemen verwendet.
Kann jemand in diesen Kontexten eine Arena für mich definieren ?
quelle
Antworten:
Eine Arena ist nur ein großes, zusammenhängendes Speicherelement, das Sie einmal zuweisen und dann zum manuellen Verwalten des Speichers verwenden, indem Sie Teile dieses Speichers verteilen. Beispielsweise:
Der Punkt ist, dass Sie die volle Kontrolle darüber haben, wie die Speicherzuordnung funktioniert. Das einzige, was außerhalb Ihrer Kontrolle liegt, ist der einzelne Bibliotheksaufruf für die anfängliche Zuordnung.
Ein beliebter Anwendungsfall ist, dass in jeder Arena nur Speicherblöcke mit einer einzigen festen Größe zugewiesen werden. In diesem Fall können Sie sehr effiziente Reklamationsalgorithmen schreiben. Ein weiterer Anwendungsfall besteht darin, eine Arena pro "Aufgabe" zu haben. Wenn Sie mit der Aufgabe fertig sind, können Sie die gesamte Arena auf einmal freigeben und müssen sich nicht um die Verfolgung einzelner Freigaben kümmern.
Jede dieser Techniken ist sehr spezialisiert und im Allgemeinen nur dann nützlich, wenn Sie genau wissen, was Sie tun und warum die normale Bibliothekszuordnung nicht gut genug ist. Beachten Sie, dass ein guter Speicherzuweiser selbst bereits viel Magie ausführt, und Sie benötigen eine angemessene Menge an Beweisen dafür, dass dies nicht gut genug ist, bevor Sie selbst mit dem Speicher umgehen.
quelle
Ich werde mit diesem als mögliche Antwort gehen.
•Memory Arena (also known as break space)--the area where dynamic runtime memory is stored. The memory arena consists of the heap and unused memory. The heap is where all user-allocated memory is located. The heap grows up from a lower memory address to a higher memory address.
Ich werde die Synonyme von Wikipedia hinzufügen : Region, Zone, Arena, Gebiet oder Speicherkontext.
Grundsätzlich ist es Speicher, den Sie vom Betriebssystem erhalten und aufteilen und der dann auf einmal freigegeben werden kann. Dies hat den Vorteil, dass wiederholte kleine Aufrufe
malloc()
teuer sein können (Jede Speicherzuweisung hat Leistungskosten: die Zeit, die zum Zuweisen des Speichers im logischen Adressraum Ihres Programms benötigt wird, und die Zeit, die zum Zuweisen dieses Adressraums zum physischen Speicher benötigt wird) Wo, als ob Sie einen Ballpark kennen, können Sie sich einen großen Teil des Gedächtnisses sichern und es dann an Ihre Variablen weitergeben, wie / wie Sie es brauchen.quelle
Betrachten Sie es als Synonym für "Haufen". Normalerweise hat Ihr Prozess nur einen Heap / eine Arena, und die gesamte Speicherzuweisung erfolgt von dort aus.
Manchmal haben Sie jedoch die Situation, dass Sie eine Reihe von Zuordnungen zusammenfassen (z. B. zur Leistung, um Fragmentierung zu vermeiden usw.). In diesem Fall ist es besser, einen neuen Heap / eine neue Arena zuzuweisen, und dann können Sie für jede Zuordnung entscheiden, von welchem Heap Sie zuordnen möchten.
Beispielsweise haben Sie möglicherweise ein Partikelsystem, in dem viele Objekte derselben Größe häufig zugewiesen und freigegeben werden. Um eine Fragmentierung des Speichers zu vermeiden, können Sie jedes Partikel einem Heap zuordnen, der nur für diese Partikel verwendet wird. Alle anderen Zuordnungen stammen aus dem Standardheap.
quelle
Von http://www.bozemanpass.com/info/linux/malloc/Linux_Heap_Contention.html :
Sie können auch auf diesen Link verweisen:
http://www.codeproject.com/Articles/44850/Arena-Allocator-DTOR-and-Embedded-Preallocated-Buf
quelle