Ich habe hier eine Speicherverwaltung, die nichts anderes macht, als eine globale Variable vom Stack als Heap zu verwenden:
u8_t ram_heap[MEM_SIZE_ALIGNED + (2*SIZEOF_STRUCT_MEM) + MEM_ALIGNMENT];
Der Code rennt auf einen ARM, dürfte sich unter Modifikationen der Headerabhängigkeiten aber sicher in einen Linuxprogramm auch laufen zu lassen. Meine Frage: Wie kann ich den Code am besten testen? Auf so Sachen wie Fragmentierung (intern/extern), Sucheigenschaften, etc. Vielleicht auch grafisch darstellen.
Generell würde ich das ganze auf jeden Fall mit einem Fuzz-Test auf Robustness testen.
Sucheigenschaften, Fragmentierung, etc. sind komplett vom Betriebssystem abhängig. Als einfache Variante: Erstell dir n Strukturen und speichere diese in einem Array und zusätzlich in deinem Heap. Dann mische die Elemente in deinem Array und such die einzelnen Elemente in deinem Heap. Damit hast du abwechselnd verschiedene Bereich aktiv und würdest - wenn er groß ist - Paging, etc. verwenden.
Wie man das visualisiert ist eine gute Frage. Da habe ich keine Ahnung aber vielleicht liefert das Tool (memviz) ein paar Ideen.
Der Punkt ist, das ist ein Microcontroller (STM32), der hat kein Betriebssystem. Daher ist auch eine eigene Speicherverwaltung aktiv, die einfach eine statische, globale Variable als Heap verwendet. Und denCode würde ich gerne auf diese Sachen testen, da sie wirklich nur davon abhängig sind. Ja, den Code von memviz könnte ich mir mal ansehen, im Endeffekt muss ich nur die Belegung von einen Bytearray auswerten…
Btw. wenn man lustig ist, kann man sich auch unter Windows und Linux in C/C++ locker einen eigenen Heap und malloc/free bauen. Einfach nen fettes Array nehmen und die Funktionen dazu basteln ^^
Das habe ich falsch verstanden. Ich dachte es ginge darum zu testen wie sich der Code dann auf Linux verhält.
Ja, stimmt. Hatte da einmal für eine Übung auf der Uni eine sehr triviale Heap-Implementation per Linked List im Einsatz. Weder performant noch sehr effizient aber es war garantiert dass am Programmende aufgeräumt wird.
Ich glaub’ ich würde aber mal schauen was andere so entwickelt haben. In C++ gibt’s ja diverse SmartPointer-Implementierungen. Für C gibt’s sicher auch sowas.
Was neues will ich ja nicht programmieren. Der Code ist aus der verwendeten Netzbibliothek und will einfach testen, wie Effizient diese ist. Ansonsten muss ich eh wo anders aufräumen, meine 24KiB RAM sind schon voll ^^
ich kenne mich mit Microcontroler leider nicht so gut aus(bzw. gar nicht), aber ich habe folgendes gefunden:
Ich hoffe du findest dort was…
Das hat zwar nichts mit deinem Problem zu tun, aber ich denke,
es könnte behilflich sein.