Ich würde gerne wissen, wie viel RAM ich in meinem Projekt verwende, soweit ich das beurteilen kann. Ich habe eine Phase in einem ziemlich großen Projekt erreicht, in der ich festgestellt habe, dass mir der Arbeitsspeicher ausgeht.
Ich habe dies festgestellt, weil ich einen Abschnitt hinzufügen kann und dann irgendwo anders in meinem Code die Hölle losbricht, ohne dass es einen offensichtlichen Grund gibt. Wenn ich #ifndef
was anderes raus habe, klappt es wieder. An dem neuen Code ist programmgesteuert nichts auszusetzen.
Ich vermutete für eine Weile, dass ich das Ende des verfügbaren Arbeitsspeichers erreichte. Ich glaube nicht, dass ich zu viel Stack verwende (obwohl dies möglich ist). Wie kann ich am besten feststellen, wie viel RAM ich tatsächlich verwende?
Beim Durcharbeiten und Ausarbeiten habe ich Probleme, wenn ich an Aufzählungen und Strukturen komme. Wie viel Speicher kosten sie?
zuerst bearbeiten: Auch ich habe meine Skizze so viel geändert seit dem Start, das sind nicht die tatsächlichen Ergebnisse , die ich am Anfang bekam, aber sie sind das, was ich jetzt bekommen.
text data bss dec hex filename
17554 844 449 18847 499f HA15_20140317w.cpp.elf
16316 694 409 17419 440b HA15_20140317w.cpp.elf
17346 790 426 18562 4882 HA15_20140317w.cpp.elf
Die erste Zeile (mit Text 17554) funktionierte nicht, nach langem Bearbeiten funktioniert die zweite Zeile (mit Text 16316) ordnungsgemäß.
Bearbeiten: In der dritten Zeile funktioniert alles, serielles Lesen, meine neuen Funktionen usw. Ich habe im Wesentlichen einige globale Variablen und doppelten Code entfernt. Ich erwähne dies, weil es (wie vermutet) nicht um diesen Code per sae geht, sondern um die RAM-Auslastung. Das bringt mich zurück zu der ursprünglichen Frage, wie man es am besten misst. Ich überprüfe immer noch einige Antworten, danke.
Wie interpretiere ich die obigen Informationen tatsächlich?
Bisher ist mein Verständnis:
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
Warum funktioniert das zweite, das erste jedoch nicht? Wenn es DATA+BSS
dann ist, besetzen beide mehr als 1024.
Erneut bearbeiten: Ich habe die Frage bearbeitet, um den Code einzuschließen, aber jetzt habe ich sie entfernt, da sie wirklich nichts mit dem Problem zu tun hatte (abgesehen von möglicherweise schlechten Codierungspraktiken, Variablendeklarationen und dergleichen). Sie können den Code überprüfen, indem Sie sich die Änderungen noch einmal ansehen, wenn Sie ihn wirklich sehen möchten. Ich wollte noch einmal auf die Frage zurückkommen, die sich eher mit der Messung der RAM-Auslastung befasst.
String
Typ in Ihren Programmen? Dies führt bekanntermaßen zu häufigen dynamischen Speicherzuweisungen und -freigaben, wodurch der Heap möglicherweise so fragmentiert wird, dass möglicherweise kein Speicher mehr vorhanden ist.
String
wegen des Overheads von s fern . Ich arbeite gerne mit char-Arrays, das heißt, ich definiere fast immer alle char-Arrays mit einer festen Größe (im Moment habe ich EIN Byte-Array, das nicht nur darauf beruht, dass ich die Inhaltslänge für verschiedene Neukompilierungen ändere.