Ich habe Probleme mit der Speicherfragmentierung in meinem Programm und bin nicht in der Lage, sehr große Speicherblöcke nach einer Weile zuzuweisen. Ich habe die entsprechenden Beiträge in diesem Forum gelesen - hauptsächlich este ein. Und ich habe noch einige Fragen.
Ich habe einen Speicherplatz verwendet Profiler um sich ein Bild von der Erinnerung zu machen. Ich habe ein 1-zeiliges Programm geschrieben, das cin >> var; enthält und ein Bild des Speichers gemacht:
Alt-Text http://img22.imageshack.us/img22/6808/memoryk.gif Wo auf dem oberen Bogen - grün bedeutet freien Platz, gelb zugewiesen, rot gebunden. Meine Frage ist: Was ist der zugewiesene Speicher auf der rechten Seite? Ist es der Stack für den Hauptthread? Dieser Speicher wird nicht freigegeben, und er teilt den kontinuierlichen Speicher, den ich brauche. In diesem einfachen 1-Zeilen-Programm ist die Aufteilung nicht so schlimm. In meinem eigentlichen Programm ist mehr Speicher in der Mitte des Adressraums zugewiesen, und ich weiß nicht, woher er kommt. Ich weise diesen Speicher noch nicht zu.
-
Wie kann ich versuchen, dieses Problem zu lösen? Ich dachte an einen Wechsel zu etwas wie nedmalloc oder dlmalloc. Das würde aber nur für die Objekte gelten, die ich selbst explizit zuweise, während die im Bild gezeigte Aufteilung nicht verschwinden würde? Oder gibt es eine Möglichkeit, die CRT-Zuweisung durch einen anderen Speichermanager zu ersetzen?
-
Apropos Objekte, gibt es irgendwelche Wrapper für nedmalloc für C++, so dass ich neue und löschen verwenden können, um Objekte zuzuweisen?
Gracias.
1 Stimmen
Microsoft Security Essentials geht davon aus, dass die in der ursprünglichen Frage verlinkte "Profiler"-Anwendung den Trojaner Win32.Bisar!rts enthält.