Speicherverbrauch optimieren



  • Speicher sollte doch heutzutage kein Problem mehr sein ist doch massig vorhanden nicht wie vor 15 Jahren 🙂
    Es kommt ja immer auf den Anwendungsfall drauf an, ich würde jetzt nicht prinzipiell sagen "Lager alles in eine extra Funktion aus" aber so wie es sich jetzt anhört, tu es 🙂

    schirrmie



  • Und doch ist Speicher heutzutage ein Problem, wie bei mir: das Programm ist für OpenWRT und je kleiner der Speicherverbrauch, umso besser fürs System. Ok, dann werd ich meinen Init-Kode auslagern.

    Generell sollte man doch als Programmierer immer bestrebt sein, seine Programme sparsam zu halten.

    Danke!



  • Das ist Richtig, ich hab ja nicht gewusst das du nicht für einen "normalen" PC programmierst. Ich selbe Programmiere auch für AVR Mikrocontroller. Da ist Speicher und Rechenleistung auch "begrenzt". Dort nutz meine Variable auch mal doppelt und dreifach und macht andere "schweinerein". Ist zwar letztendlich nicht mehr leserlich für dritten aber erforderlich.

    schirrmie



  • Also ich glaube mal irgendwo gelesen zu haben, dass der gcc sowas rausoptimiert (mehrere Variablen zu einer zusammenfassen). Ich muss mal kucken, ob ich dazu noch was finden kann ....



  • Programmierst du unter Linux?
    Ich denke Valgrind sollte dann doch sowas anzeigen oder? Also ob der Speicher dauerhaft belegt ist.
    Ansonsten machs doch wie gesagt mit malloc() und free().
    rya.



  • Ein Lösung wäre es, die Initialisierung (mit allen später nicht benötigten Variablen) in eine Funktion auszulagern:

    void init()
    {
      char grosser_buffer_der_nur_im_init_kode_gebraucht_wird[1024];
    
      /* init */
      strncpy(grosser_buffer_der_nur_im_init_kode_gebraucht_wird,1024,"seehr langer text");
    }
    int main()
    {
      char buf[20];
      init();
    
      /* loop */
      for(;;) {
        strncpy(buf,sizeof(buf),"Hallo Welt");
      }
      return 0;
    }
    


  • Ja unter Linux. Ich habe nur zur vereinfachten Darstellung einen so großen Buffer gewählt. In meinen Programm bestehen meine Variablen aus vielen Zeigern und vielen int's. Deshalb ist malloc() hier unangebracht.

    Mir geht es um das Prinzip: was macht der gcc mit meinen Variablen? Vielleicht findet sich hier jemand, der die gcc-Optimierungen kennt?



  • Dankie CStoll, das habe ich mir schon gedacht. Dann werd ich das mal machen und schauen, ob man am Speicherverbrauch was merkt.



  • CStoll schrieb:

    Ein Lösung wäre es, die Initialisierung (mit allen später nicht benötigten Variablen) in eine Funktion auszulagern:

    nur wenn sein minimalsystem auch so viel stackspeicher hat. 😉
    OP: wieso die kopieroperation? musst du den 'sehr langen text' zur laufzeit verändern? wenn ja: vielleicht gibt es andere möglichkeiten. also, wieso kopierst du?
    🙂



  • Ok, das war echt blöd von mir diesen Code zu posten. Das ist nur ein Beispiel. In meinem *richtigen* Programm arbeite ich nur mit Zeigern, int's und Systemfunktionen. Mir ging es nur um das Prinzip - was passiert mit meinem Variablen im loop. Denn diese müssen im loop nichtmehr verfügbar sein.



  • wie CStoll schon angedeutet hat: möglichst lokale variablen benutzen, weil der speicher wieder recycled wird. hast du malloc/free zur verfügung, dann könnteste auch damit temporär speicher besorgen (steht ja auch schon irgendwo weiter oben).
    🙂


Anmelden zum Antworten