Optimierung: Arrayinhalt in zwei Arrays verschieben



  • Hallo,

    ich bin gerade dabei, mein Programm effizienter zu machen. Mir sind in meinem Code folgende Zeilen aufgefallen, die noch Potenzial haben (nur der interessante Ausschnitt des Programms, Variablen werden natürlich zuvor definiert, Speicher allociert, Werte initialisiert etc.):

    for (i=0; i<W_input_hidden_size; i++) 
    		{
    			W_input_hidden[i]=matrizen_sicherungsdatei[i];
    		}
    		for (i=0; i<W_hidden_output_size; i++) 
    		{
    			W_hidden_output[i]=matrizen_sicherungsdatei[i+W_input_hidden_size];
    		}
    

    Was tue ich damit:

    • Der Inhalt des Arrays "matrizen_sicherungsdatei" wird in die Arrays "W_input_hidden" und "W_hidden_output" kopiert
    • Das Array "matrizen_sicherungsdatei" wird danach nicht mehr benötigt
    • Der Code tut was er soll

    Da ich das Array "matrizen_sicherungsdatei" danach nicht mehr brauche, wäre es naheliegend die Daten nicht zu kopieren sondern zu verschieben. Geht das irgendwie?
    Das Verschieben in andere Arrays ist für die Lesbarkeit des Codes wichtig, wenn ich nur mit dem Array "matrizen_sicherungsdatei" weiterarbeiten würde, wird das sehr unschön.

    Danke & Gruß,
    Moritz



  • Salut Moritz,

    was bedeutet denn für dich "verschieben"? Falls für dich verschieben bedeutet, dass der Speicherbereich danach genullt wird, sehe ich keinen Zweck in dem was du erreichen möchtest.

    Verwende einfach das Array "matrizen_sicherungsdatei" nicht mehr und gebe gegebenenfalls den Speicher frei (sofern notwendig), wenn es dir einfach um die Lesbarkeit geht.

    Mit der folgenden Aussage möchte ich mich nicht zu weit aus dem Fenster lehnen, aber anstatt eines Loops könntest du glaube ich auch memmove oder memcpy für das kopieren der Daten verwenden. Wie gesagt, diese Aussage unter Vorbehalt.

    Gruß



  • Hallo,

    mit verschieben meine ich, dass die Daten im Speicher erhalten bleiben so wie sie sind und nur der Arrayname sich ändert. Ich möchte mir das Duplizieren der Daten sparen. Etwa so wie wenn ich mit dem Betriebssystem eine Datei von einem Ordner in einen anderen verschiebe, da wird die Datei ja auch nicht kopiert (=woanders in den Speicher geschrieben). Die Daten auf der Festplatte bleiben da wo sie sind, nur der Zugriffspfad ändert sich. Sowas möchte ich mit dem Arrayinhalt machen.
    So wie ich memmove und memcpy verstanden habe, dupliziert es die Dateien ja auch, oder?

    Gruß



  • Warum benennst du die Variable dann nicht gleich richtig, dann brauchst du auch nichts verschieben (d.h. warum arbeitest du nicht gleich mit den Arrays W_input_hidden und W_hidden_output)? 😕

    Alternativ könntest du natürlich auch mit Zeigern arbeiten:

    int *pInput  = &matrizen_sicherungsdatei[0];
    int *pOutput = &matrizen_sicherungsdatei[W_input_hidden_size];
    

    (kommt natürlich auf den Geltungsbereich von matrizen_sicherungsdatei an)



  • Das mit den Zeigern war das, was ich gesucht habe. Vielen Dank!

    Ich arbeite nicht direkt mit den anderen Arrays, weil das den Code an anderer Stelle wieder unübersichtlich machen würde. Ist so für mich besser lesbar 🙂


Anmelden zum Antworten