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:
parent
aacea3c10a
commit
7d066a85ee
2 changed files with 61 additions and 21 deletions
|
|
@ -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())
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -83545,7 +83545,7 @@ Date:   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ü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ät">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
|
|
@ -83563,7 +83563,7 @@ Date:   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:   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:   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ß aber noch einen weiteres Problem geben">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -84020,8 +84020,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
...denn auch am Ende bleibt ein use-cnt ü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ächlich wollte ich den Destruktor nicht nach der de-Allokation aufrufen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -84031,8 +84030,7 @@ Date:   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 »eingeknickt« und habe doch eine std::function genommen. Und deren Destruktor <b>muß</b> 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:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
weil vor jeder regulären Änderung der Checksumme auch ein Log-Aufruf steht. Und die Log-Einträ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:   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ängt von der Aufruf-Reihenfolge ab">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -84081,8 +84077,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
...fälschlicherweise der laufende Allokations-Counter verwendet
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -84107,8 +84102,7 @@ Date:   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ß dann nur die Element-Zahl und Kapazitä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:   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ß die dynamische Anpassung stattgefunden hat">
|
||||
|
|
@ -84613,13 +84608,29 @@ Date:   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">
|
||||
|
|
|
|||
Loading…
Reference in a new issue