Library: lib::Several container now passes test with TrackingAllocator
- decided to allow creating empty lib::Several; no need to be overly rigid in this point, since it is move-assignable anyway... - populate with enough elements to provoke several reallocations with copying over the existing elements - precisely calculate and verify the expected allocation size - verify the use-count due to dedicated allocator instances being embedded into both the builder and hidden in the deleter - move-assign data - all checksums go to zero at end
This commit is contained in:
parent
50306db164
commit
aacea3c10a
3 changed files with 105 additions and 63 deletions
|
|
@ -158,7 +158,7 @@ namespace lib {
|
|||
* Typically the return type is an interface,
|
||||
* and the Implementation wraps some datastructure
|
||||
* holding subclasses.
|
||||
* @warning in rework 5/2025
|
||||
* @note may only be populated through SeveralBuilder
|
||||
*/
|
||||
template<class I>
|
||||
class Several
|
||||
|
|
@ -169,9 +169,9 @@ namespace lib {
|
|||
|
||||
Bucket data_{nullptr};
|
||||
|
||||
Several() =default; ///< may only be created through SeveralBuilder
|
||||
|
||||
public:
|
||||
Several() =default; ///< usually to be created through SeveralBuilder
|
||||
|
||||
~Several() noexcept
|
||||
try { if (data_) data_->destroy(); }
|
||||
ERROR_LOG_AND_IGNORE (progress, "clean-up Several data")
|
||||
|
|
|
|||
|
|
@ -551,7 +551,10 @@ namespace test{
|
|||
}
|
||||
|
||||
|
||||
|
||||
/** @test TODO demonstrate integration with a custom allocator
|
||||
* - use the TrackingAllocator to verify balanced handling
|
||||
* of the underlying raw memory allocations
|
||||
* @todo WIP 6/24 🔁 define ⟶ 🔁 implement
|
||||
*/
|
||||
void
|
||||
|
|
@ -559,36 +562,47 @@ namespace test{
|
|||
{
|
||||
CHECK (0 == Dummy::checksum());
|
||||
CHECK (0 == TrackingAllocator::checksum());
|
||||
SHOW_EXPR(TrackingAllocator::numAlloc());
|
||||
SHOW_EXPR(TrackingAllocator::numBytes());
|
||||
SHOW_EXPR(TrackingAllocator::use_count());
|
||||
auto& log = TrackingAllocator::log;
|
||||
log.clear("Several-Builder-Test");
|
||||
|
||||
Several<Dummy> elms;
|
||||
size_t expectedAlloc;
|
||||
CHECK (0 == TrackingAllocator::numAlloc());
|
||||
CHECK (0 == TrackingAllocator::use_count());
|
||||
{
|
||||
auto builder = makeSeveral<Dummy>()
|
||||
.withAllocator<test::TrackAlloc>();
|
||||
SHOW_TYPE(decltype(builder))
|
||||
SHOW_EXPR(builder.size())
|
||||
SHOW_EXPR(builder.capacity())
|
||||
builder.fillElm(55);
|
||||
SHOW_EXPR(builder.size())
|
||||
SHOW_EXPR(builder.capacity())
|
||||
|
||||
SHOW_EXPR(TrackingAllocator::numAlloc());
|
||||
SHOW_EXPR(TrackingAllocator::numBytes());
|
||||
SHOW_EXPR(TrackingAllocator::use_count());
|
||||
SHOW_EXPR(TrackingAllocator::checksum());
|
||||
.withAllocator<test::TrackAlloc>()
|
||||
.fillElm(55);
|
||||
|
||||
size_t elmSiz = sizeof(Dummy);
|
||||
size_t buffSiz = elmSiz * builder.capacity();
|
||||
size_t headerSiz = sizeof(ArrayBucket<Dummy>);
|
||||
expectedAlloc = headerSiz + buffSiz;
|
||||
|
||||
CHECK (TrackingAllocator::numBytes() == expectedAlloc);
|
||||
CHECK (TrackingAllocator::numAlloc() == 1);
|
||||
CHECK (TrackingAllocator::use_count()== 2); // one instance in the builder, one in the deleter
|
||||
CHECK (TrackingAllocator::checksum() > 0);
|
||||
|
||||
elms = builder.build();
|
||||
}
|
||||
CHECK (elms.size() == 55);
|
||||
CHECK (TrackingAllocator::numBytes() == expectedAlloc);
|
||||
CHECK (TrackingAllocator::numAlloc() == 1);
|
||||
CHECK (TrackingAllocator::use_count()== 1); // only one allocator instance in the deleter left
|
||||
|
||||
auto others = move(elms);
|
||||
CHECK (elms.size() == 0);
|
||||
CHECK (others.size() == 55);
|
||||
CHECK (TrackingAllocator::numBytes() == expectedAlloc);
|
||||
CHECK (TrackingAllocator::numAlloc() == 1);
|
||||
CHECK (TrackingAllocator::use_count()== 1);
|
||||
|
||||
others = move(Several<Dummy>{}); // automatically triggers de-allocation
|
||||
CHECK (others.size() == 0);
|
||||
|
||||
CHECK (0 == Dummy::checksum());
|
||||
SHOW_EXPR(TrackingAllocator::numAlloc());
|
||||
SHOW_EXPR(TrackingAllocator::numBytes());
|
||||
SHOW_EXPR(TrackingAllocator::use_count());
|
||||
SHOW_EXPR(TrackingAllocator::checksum());
|
||||
|
||||
cout << "____Tracking-Allo-Log_________\n"
|
||||
<< util::join(TrackingAllocator::log,"\n")
|
||||
<< "\n───╼━━━━━━━━━━━━━━━━━╾────────"<<endl;
|
||||
|
||||
CHECK (0 == TrackingAllocator::numBytes());
|
||||
CHECK (0 == TrackingAllocator::numAlloc());
|
||||
CHECK (0 == TrackingAllocator::use_count());
|
||||
CHECK (0 == TrackingAllocator::checksum());
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -83480,8 +83480,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718365424109" ID="ID_1414527850" MODIFIED="1718365440812" TEXT="benötigt: Schema zum Einrichten des Allokators">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1718365424109" ID="ID_1414527850" MODIFIED="1718730128866" TEXT="benötigt: Schema zum Einrichten des Allokators">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1718365443600" ID="ID_826094679" MODIFIED="1718365447214" TEXT="Nutzmuster">
|
||||
<node CREATED="1718365455761" ID="ID_1839293953" MODIFIED="1718365460053" TEXT="Typ gegeben">
|
||||
<node CREATED="1718365476302" ID="ID_1390595799" MODIFIED="1718365485145" TEXT="das muß dann aber ein Template-Template sein"/>
|
||||
|
|
@ -83507,7 +83507,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1718366856119" ID="ID_785388847" MODIFIED="1718366879219" TEXT="der SeveralBuilder nimmt den kompletten Typ der AllocationPolicy"/>
|
||||
<node CREATED="1718366892178" ID="ID_997504046" MODIFIED="1718369131234" TEXT="dieser muß korrekt mit den anderen Typ-Parametern I und E instantiiert worden sein"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1718365914668" ID="ID_347456374" MODIFIED="1718367155482" TEXT="Problem: Inferenz">
|
||||
<node COLOR="#435e98" CREATED="1718365914668" ID="ID_347456374" MODIFIED="1718730142162" TEXT="Problem: Inferenz">
|
||||
<linktarget COLOR="#f46464" DESTINATION="ID_347456374" ENDARROW="Default" ENDINCLINATION="17;-202;" ID="Arrow_ID_1949614691" SOURCE="ID_312263866" STARTARROW="None" STARTINCLINATION="-58;5;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1718366978511" ID="ID_1008148490" MODIFIED="1718367000513" TEXT="gegeben">
|
||||
|
|
@ -83523,7 +83523,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<font NAME="SansSerif" SIZE="10"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718367280430" ID="ID_666047930" MODIFIED="1718367295858" TEXT="zusätzlich: Erweiterungspunkt gefordert">
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1718367280430" ID="ID_666047930" MODIFIED="1718730138202" TEXT="zusätzlich: Erweiterungspunkt gefordert">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1718367354045" ID="ID_351719166" MODIFIED="1718367379648" TEXT="um die AllocationPolicy an zukünftige Allokator-Setups anzupassen"/>
|
||||
<node CREATED="1718367386303" ID="ID_30749831" MODIFIED="1718367408489" TEXT="idealerweise ohne diese direkt im Header several-builder.hpp referenzieren zu müssen"/>
|
||||
|
|
@ -83563,8 +83563,8 @@ 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 BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1718401002675" ID="ID_594290716" MODIFIED="1718412451294" TEXT="erst mal default-Setup anfangen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1718401002675" 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">
|
||||
<node CREATED="1718408556207" ID="ID_73442585" MODIFIED="1718408561538" TEXT="im Namespace lib::allo"/>
|
||||
|
|
@ -83626,6 +83626,10 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#8a4398" CREATED="1718730092408" ID="ID_579341832" MODIFIED="1718730119407" TEXT="ganz schön komplexes setup .... funktioniert aber auf Anhieb">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1718412437319" ID="ID_947832201" MODIFIED="1718412481457" TEXT="dann Spezialisierung für AllocationCluster">
|
||||
<icon BUILTIN="pencil"/>
|
||||
|
|
@ -83693,7 +83697,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#2c878c" CREATED="1718412901000" ID="ID_1589785077" MODIFIED="1718412970228" TEXT="YESS!!! der Compiler frißt das">
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1718581460854" ID="ID_1938493773" MODIFIED="1718674324815" TEXT="erst mal mit einem nachvollziebaren Allocator verifizieren...">
|
||||
<node COLOR="#338800" CREATED="1718581460854" ID="ID_1938493773" MODIFIED="1718730079073" TEXT="erst mal mit einem nachvollziebaren Allocator verifizieren...">
|
||||
<arrowlink COLOR="#49596d" DESTINATION="ID_360498640" ENDARROW="Default" ENDINCLINATION="177;-168;" ID="Arrow_ID_1985044400" STARTARROW="None" STARTINCLINATION="-601;28;"/>
|
||||
<linktarget COLOR="#2a81b2" DESTINATION="ID_1938493773" ENDARROW="Default" ENDINCLINATION="-141;780;" ID="Arrow_ID_814216426" SOURCE="ID_1342074261" STARTARROW="None" STARTINCLINATION="664;-34;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
|
|
@ -83971,9 +83975,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718581783068" ID="ID_1789618356" MODIFIED="1718581797769" TEXT="standardkonformen custom-Allocator ankoppeln">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#5b178b" CREATED="1718674398898" ID="ID_1136800053" MODIFIED="1718726484671" TEXT="Checksumme vom TrackingAllocator ⟲ wrapped">
|
||||
<node COLOR="#338800" CREATED="1718581783068" ID="ID_1789618356" MODIFIED="1718730052016" TEXT="standardkonformen custom-Allocator ankoppeln">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#5b178b" CREATED="1718674398898" FOLDED="true" ID="ID_1136800053" MODIFIED="1718726484671" TEXT="Checksumme vom TrackingAllocator ⟲ wrapped">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1718674427169" ID="ID_516703978" MODIFIED="1718674444637" TEXT="lt. Log sehen die Alloc/Dealloc-Paare alle sauber aus"/>
|
||||
<node CREATED="1718674446057" ID="ID_801400606" MODIFIED="1718674470177" TEXT="die gewrappte Summe deutet auf einen überschüssigen de-Alloc hin"/>
|
||||
|
|
@ -83983,8 +83987,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1718718804897" ID="ID_1202983917" MODIFIED="1718718821977" TEXT="das wirft einen klar einen Verdacht auf den Deleter"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1718718825148" ID="ID_22765547" MODIFIED="1718718831526" TEXT="Untersuchung Deleter-Verhalten">
|
||||
<node CREATED="1718718825148" ID="ID_22765547" MODIFIED="1718730064321" TEXT="Untersuchung Deleter-Verhalten">
|
||||
<icon BUILTIN="list"/>
|
||||
<node CREATED="1718718832485" ID="ID_1963316300" MODIFIED="1718718836535" TEXT="10 Elemente">
|
||||
<node CREATED="1718718837569" ID="ID_895298215" MODIFIED="1718718844013" TEXT="kein Checksummen-Fehler"/>
|
||||
<node CREATED="1718718844622" ID="ID_545810670" MODIFIED="1718718852756" TEXT="use-count bleibt aber 1 am Ende"/>
|
||||
|
|
@ -83994,13 +83998,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1718718906083" ID="ID_1914635563" MODIFIED="1718718912133" TEXT="use-count bleibt 2 am Ende"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1718718952386" ID="ID_1833378958" MODIFIED="1718726465896" TEXT="⟹ Schlußfolgerungen">
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1718718952386" FOLDED="true" ID="ID_1833378958" MODIFIED="1718726465896" TEXT="⟹ Schlußfolgerungen">
|
||||
<node COLOR="#435e98" CREATED="1718718968137" ID="ID_113992967" MODIFIED="1718726544827" TEXT="der Destruktor des Funktors selber wird nicht aufgerufen">
|
||||
<node CREATED="1718720020327" ID="ID_97951871" MODIFIED="1718720077878" TEXT="im Fall von re-Alloc ist das ein konzeptioneller Fehler">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
denn dort rufen wir den Destruktor-Funktor explizit auf, anstatt den Destruktor von ArrayBucket aufzurufe
|
||||
|
|
@ -84011,9 +84014,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1718720078908" ID="ID_1281202485" MODIFIED="1718720144715" TEXT="es muß aber noch einen weiteres Problem geben">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...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 (!)
|
||||
|
|
@ -84024,9 +84025,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<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>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...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
|
||||
|
|
@ -84042,9 +84041,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#435e98" CREATED="1718718995909" ID="ID_1826487879" MODIFIED="1718726502584" TEXT="beim re-Alloc muß irgendwo eine Data-corruption verborgen sein">
|
||||
<node CREATED="1718719106342" ID="ID_1068879050" MODIFIED="1718719187571" TEXT="warum kein double-free?">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
weil vor jeder regulären Änderung der Checksumme auch ein Log-Aufruf steht. Und die Log-Einträge sehen allesamt korrekt und balanaciert aus
|
||||
|
|
@ -84062,9 +84059,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1718720426940" ID="ID_956992006" MODIFIED="1718722346350" TEXT="es wird inkonsistent geloggt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
|
|
@ -84080,9 +84075,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1718720455410" ID="ID_918494351" MODIFIED="1718720546328" TEXT="die Checksumme hängt von der Aufruf-Reihenfolge ab">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...fälschlicherweise der laufende Allokations-Counter verwendet
|
||||
|
|
@ -84108,9 +84101,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1718725747821" ID="ID_1108981895" MODIFIED="1718725778611" TEXT="all das muß künftig über Template-Parameter bereits statsich festgelegt werden"/>
|
||||
<node CREATED="1718725820365" ID="ID_115242482" MODIFIED="1718725961225" TEXT="ein trivialer Destructor wird sich per EBO reduzieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...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.
|
||||
|
|
@ -84135,6 +84126,43 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1718730152368" ID="ID_660244460" MODIFIED="1718730214146" TEXT="funktioniert sauber">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
provoziere mehrere re-Allokationen
|
||||
</li>
|
||||
<li>
|
||||
prüfe die use-counts für die eingebetteten Allokator-Instanzen
|
||||
</li>
|
||||
<li>
|
||||
move-Asignments räumen auch sauber auf
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1718730232613" ID="ID_194573786" MODIFIED="1718730397838" TEXT="AllocationCluster ankoppeln">
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718730253250" ID="ID_361490227" MODIFIED="1718730391736" TEXT="müßte sogar mit der gleichen schon bestehenden front-End-Instanz funktionieren">
|
||||
<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">
|
||||
<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">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718730317115" ID="ID_1509954190" MODIFIED="1718730388371" TEXT="es sollte sich genau die gleiche Speicherbelegung ergeben">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1718730353373" ID="ID_819034170" MODIFIED="1718730388372" TEXT="Objekt-Cleanup findet statt — aber keine de-Allokation">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue