Wie berechne Fragmentierung?
Stellen Sie sich vor Sie haben einige Speicher, enthält eine Reihe von bytes:
++++ ++-- ---+ +++-
-++- ++++ ++++ ----
---- ++++ +
Lassen Sie uns sagen +
Mittel und -
Mittel frei.
Ich bin auf der Suche nach der Formel, wie die Berechnung der Prozentsatz der Fragmentierung.
Hintergrund
Ich bin Implementierung einer winzigen dynamische Speicherverwaltung für ein embedded-Gerät mit statischer Speicher. Mein Ziel ist es, etwas zu haben, die ich verwenden kann für die Speicherung von kleinen Mengen von Daten. Meist eingehende Pakete, die über eine WLAN-Verbindung, bei der über 128 Bytes.
- Ahh...ich sehe. Es hängt davon ab, wie groß meine allocation-Blöcke sind.
- Wenn alle Blöcke sind etwa die gleiche Größe, und Ihr Speicher ist statisch und Ihr system zu klein, um das caching zu verwenden, die für den Speicherzugriff, der Fragmentierung möglicherweise keine Rolle - Sie haben, um nachzuverfolgen, welche slots frei sind und welche nicht, aber springen um in access sollte nicht Kosten Sie viel. Das ist im Gegensatz zu einem elektromechanischen Festplatte, wo Sie bewegen die Köpfe, wenn Sie überspringen rund, oder vielleicht ein system von langsamen DRAM-und chache wo Sie überspringen rund würde dazu führen, eine Menge von cache-misses.
InformationsquelleAutor Bigbohne | 2011-01-03
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als R. sagt, es hängt davon ab, was genau du meinst mit "Prozentsatz der Fragmentierung" - aber eine einfache Formel, die Sie verwenden könnte, wäre:
wo
So, wenn alle Speicher in einem großen block, der Fragmentierung ist 0%, und wenn der Speicher ist alles aufgeteilt in Hunderte von kleinen Blöcken, es wird in der Nähe von 100%.
Berechnen, wie viele 128-Byte-Pakete kann man in der aktuellen Speicher-layout.
Lassen Sie werden, die Anzahl n.
Berechnen, wie viele 128-Byte-Pakete kann man in ein Speicher-layout mit der gleichen Anzahl von bytes reserviert, als die aktuelle, aber ohne Löcher (das heißt, verschieben Sie die +, um zum Beispiel Links).
Lassen Sie werden, die Anzahl N.
Ihre "Zersplitterung ratio" wäre alpha = n/N
Wenn die Zuweisungen sind alle etwa die gleiche Größe, nur teilen Sie Ihre Speicher bis in
TOTAL/MAXSIZE
Stücke, die jeweils ausMAXSIZE
bytes. Dann Fragmentierung irrelevant.Beantworten Ihre Frage in der Regel, es gibt keine Magische Zahl für die "Fragmentierung". Sie bewerten die Vorzüge der verschiedenen Funktionen in der Reflexion, wie Speicher fragmentiert ist. Hier ist eine ich würde empfehlen, als eine Funktion einer Größe
n
:Beachten Sie, dass die
log
ist nur da für die Karte, was zu einem "0 bis unendlich" Maßstab; Sie sollten nicht eigentlich bewerten, dass in der Praxis. Stattdessen könnten Sie einfach zu bewerten:mit
1.0
als ideal (zuweisen konnte die maximal mögliche Anzahl der Objekte der Größen
) und0.0
sehr schlecht (nicht zu zuordnen).Wenn Sie hatte [++++++-----++++--++-++++++++--------+++++] und Sie wollte zur Messung der Fragmentierung von freiem Speicherplatz (oder andere Aufteilung)
Sie könnte Messen Sie die Durchschnittliche zusammenhängenden block Größe
Gesamtzahl der Blöcke /Anzahl der zusammenhängenden Blöcke.
In diesem Fall wäre es
4/(5 + 2 + 1 + 8) /4 = 4