Normalerweise habe ich kein Problem damit, zu entscheiden, ob einige Daten global, statisch oder auf dem Stack sein müssen (hier keine dynamische Zuordnung, daher keine Verwendung des Heapspeichers). Ich habe auch ein paar Fragen / Antworten wie diese gelesen, aber meine Frage ist spezifischer, da sie im Vergleich zum Systemspeicher eine große Datenmenge enthält.
Ich arbeite an einem vorhandenen Code, den ich zu verbessern versuche (Design, mögliche Probleme, Leistung usw.). Dieser Code läuft auf einer alten 8-Bit-MCU mit nur 4 KB RAM . In diesem Code stelle ich die Verwendung eines Arrays von fast 1 KB (ja, 1 KB auf einem 4-KB-RAM- System). Jedes Byte dieses Arrays wird verwendet, das ist nicht die Frage. Das Problem ist, dass dieses Array ein statisches Array in der Datei ist, in der es deklariert ist, sodass sein Lebenszyklus mit dem des Programms identisch ist (dh als unendlich angesehen werden kann).
Nachdem ich den Code gelesen hatte, stellte ich jedoch fest, dass dieses Array keinen unendlichen Lebenszyklus benötigt, sondern vollständig prozedural aufgebaut und behandelt wird. Daher sollten wir es nur in der Funktion deklarieren können, in der es verwendet wird. auf diese Weise wäre es auf dem Stapel, und wir würden daher diese 1 KB RAM sparen.
Nun die Frage: Wäre das eine gute Idee? Aus Sicht des Designs gehört es zum Stack, wenn es keinen unendlichen / globalen Lebenszyklus benötigt. Aber hey, das ist 1 KB von 4 KB, gibt es keinen Nachteil , wenn 25% des Arbeitsspeichers so zugewiesen werden ? (das könnten 50% oder mehr des Stapels sein)
Könnte jemand Erfahrungen mit dieser Art von Situation teilen, oder könnte jemand über einen gültigen Grund nachdenken, dieses Array nicht auf den Stapel zu legen? Ich suche technische Nachteile sowie Kommentare zum Design.
Mir ist nur bewusst, dass ich beim Aufrufen dieser Funktion sicherstellen muss, dass tatsächlich 1 KB Stack frei sind. Vielleicht ist das alles, worauf ich aufpassen muss, vielleicht auch nicht.