Library: now use AllocationCluster as custom allocator

* this validates usage of the extension point
 * however, there is no special treatment yet,
   and thus a re-alloc leves the previoius block as waste
This commit is contained in:
Fischlurch 2024-06-18 23:51:14 +02:00
parent aacea3c10a
commit 7d066a85ee
2 changed files with 61 additions and 21 deletions

View file

@ -32,6 +32,7 @@
#include "lib/test/test-coll.hpp"
#include "lib/test/test-helper.hpp"
#include "lib/test/diagnostic-output.hpp"////////////////TODO
#include "lib/allocation-cluster.hpp"
#include "lib/iter-explorer.hpp"
#include "lib/format-util.hpp"
#include "lib/util.hpp"
@ -604,6 +605,34 @@ namespace test{
CHECK (0 == TrackingAllocator::numAlloc());
CHECK (0 == TrackingAllocator::use_count());
CHECK (0 == TrackingAllocator::checksum());
AllocationCluster clu;
{
auto builder = makeSeveral<Dummy>()
.withAllocator(clu)
.reserve(5)
.fillElm(5);
size_t buffSiz = sizeof(Dummy) * builder.capacity();
size_t headerSiz = sizeof(ArrayBucket<Dummy>);
expectedAlloc = headerSiz + buffSiz;
SHOW_EXPR(expectedAlloc)
SHOW_EXPR(builder.size())
SHOW_EXPR(builder.capacity())
SHOW_EXPR(clu.numExtents())
SHOW_EXPR(clu.numBytes())
builder.append (Dummy{23});
SHOW_EXPR(builder.capacity())
buffSiz = sizeof(Dummy) * builder.capacity();
SHOW_EXPR(buffSiz)
SHOW_EXPR(buffSiz + expectedAlloc)
SHOW_EXPR(buffSiz + headerSiz)
SHOW_EXPR(builder.size())
SHOW_EXPR(builder.capacity())
SHOW_EXPR(clu.numExtents())
SHOW_EXPR(clu.numBytes())
}
}
};

View file

@ -83545,7 +83545,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1718373622001" ID="ID_641350815" MODIFIED="1718373638633" TEXT="diese wird hier abgegriffen und f&#xfc;r den SeveralBuilder verwendet"/>
</node>
<node COLOR="#5b280f" CREATED="1718373781836" ID="ID_313050395" MODIFIED="1718400886204" TEXT="Schwierigkeit: das Typ-Argument ALO">
<node COLOR="#5b280f" CREATED="1718373781836" FOLDED="true" ID="ID_313050395" MODIFIED="1718400886204" TEXT="Schwierigkeit: das Typ-Argument ALO">
<icon BUILTIN="button_cancel"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1718373868841" ID="ID_1774173708" MODIFIED="1718373891295" TEXT="das ist eine zweite und kreuzweise verschachtelte Komplexit&#xe4;t">
<icon BUILTIN="messagebox_warning"/>
@ -83563,7 +83563,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1718400888786" ID="ID_1044695658" MODIFIED="1718400893126" TEXT="somit: kein Problem!"/>
</node>
<node COLOR="#338800" CREATED="1718401002675" ID="ID_594290716" MODIFIED="1718730087219" TEXT="erst mal default-Setup anfangen">
<node COLOR="#338800" CREATED="1718401002675" FOLDED="true" ID="ID_594290716" MODIFIED="1718730087219" TEXT="erst mal default-Setup anfangen">
<icon BUILTIN="button_ok"/>
<node CREATED="1718408497231" ID="ID_744823200" MODIFIED="1718408514033" TEXT="Bestandteile">
<node CREATED="1718408520500" ID="ID_1541328453" MODIFIED="1718408533939" TEXT="Konfigurations-Template">
@ -83689,6 +83689,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1718412831442" ID="ID_155484703" MODIFIED="1718412860303" TEXT="definiere hier diese Policy als ein class-Template, das von AllocationPolicy erbt"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718412861728" ID="ID_13977121" MODIFIED="1718412883443" TEXT="damit ist der Rahmen geschaffen, um die realloc()-Funktion zu adaptieren">
<linktarget COLOR="#423abb" DESTINATION="ID_13977121" ENDARROW="Default" ENDINCLINATION="-369;15;" ID="Arrow_ID_770351964" SOURCE="ID_1835018318" STARTARROW="None" STARTINCLINATION="371;-12;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
@ -84009,8 +84010,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
denn dort rufen wir den Destruktor-Funktor explizit auf, anstatt den Destruktor von ArrayBucket aufzurufe
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1718720078908" ID="ID_1281202485" MODIFIED="1718720144715" TEXT="es mu&#xdf; aber noch einen weiteres Problem geben">
<richcontent TYPE="NOTE"><html>
@ -84020,8 +84020,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...denn auch am Ende bleibt ein use-cnt &#252;brig, obwohl doch in diesem Fall letztlich der Destruktor des Funktors aufgerufen werden sollte, wenngleich auch bereits nach der de-Allokation (!)
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<node CREATED="1718722668290" ID="ID_592162062" MODIFIED="1718722673197" TEXT="das ist das gleiche Problem"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1718722673857" ID="ID_1638861888" MODIFIED="1718726537767" TEXT="tats&#xe4;chlich wollte ich den Destruktor nicht nach der de-Allokation aufrufen">
<richcontent TYPE="NOTE"><html>
@ -84031,8 +84030,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...deshalb habe ich da so sonderbar darum herum gecodet. Ich dachte mir, kein Problem, ArrayBucket ist ja sowiso ein POD. Und dann bin ich &#187;eingeknickt&#171; und habe doch eine std::function genommen. Und deren Destruktor <b>mu&#223;</b>&#160;aufgerufen werden
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<arrowlink COLOR="#417cc2" DESTINATION="ID_1445462323" ENDARROW="Default" ENDINCLINATION="32;-92;" ID="Arrow_ID_1786077186" STARTARROW="None" STARTINCLINATION="-279;10;"/>
<icon BUILTIN="forward"/>
</node>
@ -84047,8 +84045,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
weil vor jeder regul&#228;ren &#196;nderung der Checksumme auch ein Log-Aufruf steht. Und die Log-Eintr&#228;ge sehen allesamt korrekt und balanaciert aus
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node COLOR="#338800" CREATED="1718720147931" ID="ID_1690696060" MODIFIED="1718723800015" TEXT="die Adressen im Log sind inkonsistent">
<icon BUILTIN="button_ok"/>
@ -84070,8 +84067,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</li>
</ul>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1718720455410" ID="ID_918494351" MODIFIED="1718720546328" TEXT="die Checksumme h&#xe4;ngt von der Aufruf-Reihenfolge ab">
<richcontent TYPE="NOTE"><html>
@ -84081,8 +84077,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...f&#228;lschlicherweise der laufende Allokations-Counter verwendet
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
</node>
@ -84107,8 +84102,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...konkret, ich plane einen Satz an Steuer-Flags, und auf dieser Basis dann die Belegung weiterer Storage; im einfachsten Fall gibt es keinen Spread, keinen Deleter und einen Standard-Offset; es mu&#223; dann nur die Element-Zahl und Kapazit&#228;t gespeichert werden.
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
<node CREATED="1718725976503" ID="ID_1978252495" MODIFIED="1718725998920" TEXT="zur Sicherheit: Destructor-Funktion in den Stack-Frame verschieben">
@ -84152,6 +84146,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718730287657" ID="ID_1835018318" MODIFIED="1718730388370" TEXT="den gleichen Test-Zyklus mit mehreren re-Allocs machen">
<arrowlink COLOR="#423abb" DESTINATION="ID_13977121" ENDARROW="Default" ENDINCLINATION="-369;15;" ID="Arrow_ID_770351964" STARTARROW="None" STARTINCLINATION="371;-12;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718730299524" ID="ID_1847366954" MODIFIED="1718730388370" TEXT="verifizieren, da&#xdf; die dynamische Anpassung stattgefunden hat">
@ -84613,13 +84608,29 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1716857382442" ID="ID_28139752" MODIFIED="1716857402101" TEXT="check_CustomAllocator">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1718674224723" ID="ID_1342074261" MODIFIED="1718674324815" TEXT="Verwendung eines generischen Custom-Allocators testen">
<arrowlink COLOR="#2a81b2" DESTINATION="ID_1938493773" ENDARROW="Default" ENDINCLINATION="-141;780;" ID="Arrow_ID_814216426" STARTARROW="None" STARTINCLINATION="664;-34;"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1716857382442" ID="ID_28139752" MODIFIED="1718730880415" TEXT="check_CustomAllocator">
<icon BUILTIN="pencil"/>
<node CREATED="1718674343967" ID="ID_351648881" MODIFIED="1718674353066" TEXT="verwende meinen neuen TrackingAllocator">
<node COLOR="#338800" CREATED="1718674224723" ID="ID_1342074261" MODIFIED="1718730876075" TEXT="Verwendung eines generischen Custom-Allocators testen">
<arrowlink COLOR="#2a81b2" DESTINATION="ID_1938493773" ENDARROW="Default" ENDINCLINATION="-141;780;" ID="Arrow_ID_814216426" STARTARROW="None" STARTINCLINATION="664;-34;"/>
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1718674343967" ID="ID_351648881" MODIFIED="1718730759390" STYLE="fork" TEXT="verwende meinen neuen TrackingAllocator">
<icon BUILTIN="ksmiletris"/>
<node COLOR="#435e98" CREATED="1718730762914" ID="ID_342906032" LINK="#ID_113992967" MODIFIED="1718730835701" TEXT="hat viel gebracht...">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
versteckte Inkonsistenz mit der Deleter-Behandlung aufgedeckt
</p>
</body>
</html></richcontent>
<font ITALIC="true" NAME="SansSerif" SIZE="11"/>
</node>
</node>
<node COLOR="#338800" CREATED="1718730850298" ID="ID_1480978187" MODIFIED="1718730868752" TEXT="auch re-allokationen und clean-up nach move-asignment OK">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718368791047" ID="ID_59759193" MODIFIED="1718368826816" TEXT="direktes construct-and-embed mit AllocationCluster demonstrieren">