Array dynamisch vergrößern



  • CStoll schrieb:

    (das müsste etwa bei 65 kB oder 16000 int-Werte liegen)

    Öhmmm, wie kommst jetzt darauf?



  • Also es enstehen ungefähr in 5 Sekunden 1000 Messwerte.
    10 Minuten Messung bei maximaler Abtrastfrequenz ist so das Ziel

    Die Werte direkt in eine Datei zu schreiben hab ich mir auch schon überlegt.

    Dann hab ich allerdings das selbe Problem bei der graphischen Darstellung der Messwerte. Da müßte ich die Datei wieder komplett in den Speicher laden oder für jede Berechnung die Datei durchlaufen.

    Kann ich mit malloc beliebig viel Speicher allocieren?

    Die Mess-werte liegen im float format vor.



  • Beliebig sicher nicht. Aber deine 120000 Werte sollten als float ja so ungefähr 0.5 MB belegen. Auf einem normalen 32-System sicher keine absolute Hürde 😉



  • TactX schrieb:

    CStoll schrieb:

    (das müsste etwa bei 65 kB oder 16000 int-Werte liegen)

    Öhmmm, wie kommst jetzt darauf?

    blind geraten 😉

    @Gh: Wenn möglich, kannst du die Daten auch häppchenweise einlesen und verarbeiten (und dir für die Skalierung des Diagramms merken, wieviele werte du hattest.

    Kann ich mit malloc beliebig viel Speicher allocieren?

    Wie gesagt: nur soviel, wie size_t an Werten hergibt.



  • Haltet es ihr für sinnvoll vom Gesamt Konzept her für in jedem Schleifendurchlauf das array mit realloc zu vergrößern?
    Wie kann sich das auf die Performance auswirken?
    Oder ist es besser die Werte in eine Datei zu schreiben wo sie sowie so hin müssen ohne zwischenspeichern, und dann für die Auswertung die Datei komplett einzulesen und das Array mit malloc zu definieren?

    Wie gesagt, ich habe damit nicht soviel Erfahrung mit solchen Datenmengen. Sry.



  • Gh_ent schrieb:

    Haltet es ihr für sinnvoll vom Gesamt Konzept her für in jedem Schleifendurchlauf das array mit realloc zu vergrößern?

    Nein, das definitiv nicht. Die allgemeine Strategie ist da normalerweise das Verdoppeln des Speichers wenn alter Speicher nichtmehr ausreicht.



  • Gh_ent schrieb:

    Also es enstehen ungefähr in 5 Sekunden 1000 Messwerte.
    10 Minuten Messung bei maximaler Abtrastfrequenz ist so das Ziel

    ach so, es sind doch ein paar mehr 😉 ich hätte mal dein erstes posting besser lesen sollen...

    Gh_ent schrieb:

    Die Werte direkt in eine Datei zu schreiben hab ich mir auch schon überlegt.

    kannste so machen...

    Gh_ent schrieb:

    Dann hab ich allerdings das selbe Problem bei der graphischen Darstellung der Messwerte. Da müßte ich die Datei wieder komplett in den Speicher laden oder für jede Berechnung die Datei durchlaufen.

    benutzt du windoofs? da ist sowas kein problem (mit file mapping haste die daten in der datei und im speicher gleichzeitig).



  • Wie wärs denn mit ner eigenen Datenstruktur?

    Zum Beispiel ne verkettete Liste. Jeder Listenknoten enthält Speicher für ämh vielleicht 1000 Messwerte. Wenn du merkst, das der Speicher knapp wird (Zähler einbauen), hängst du an die Liste nen neuen Knoten.



  • Super, Danke. Ich glaub, ich hab jetzt nen ganz guten überblick wie ich das generell lösen kann.

    Ja...wird wohl auf einer windows kiste als webservice laufen. Kann mir unter file mapping gerade nix vorstellen, aber da befrage ich das große orakel.

    Also vielen Dank.



  • GH_ENT schrieb:

    aber da befrage ich das große orakel.

    versuch's besser damit: http://windowssdk.msdn.microsoft.com/en-us/library/aa366556.aspx
    😉


Anmelden zum Antworten