Groesse eines dynamischen Zeigerarrays ermitteln
-
Ach, so geht das.... Danke v R!
Handlich sind sie ja schon, diese vectors. Vielleicht ist es ja doch nicht so schlimm mit der Geschwindigkeit... Hab halt nur keinen Bock nachher wieder alles umzustellen, wenn sich im Experiment zeigt, dass es doch nicht funzt.
Dank Euch, Retronade
-
also schneller ist es mit abschlussfeld nicht wirklich (warum sollte es?)
btw. was ist denn das zeitintensive bei deiner funktion?
-
Hey life
Nun, tatsächlich sind es vier Kanäle, die Ereignisse aufzeichnen, d.h. vier von diesen zweidimensionalen, geschachtelten Arrays. Nun werden alle Elemente einer Dimension jeweils von zwei Arrays dahingehend überprüft, ob ihre Differenz kleiner als ein gewisser Wert ist. Falls ja, wird jeweils noch der Mittelwert gebildet. Diese werden dann in ein weiteres Array geschrieben und auf Übereinstimmung mit den Mittelwerten des zweiten Kanalpaares überprüft. Sollte auch diese Überprüfung positiv sein, muss noch ein Array mit den Mittelwerten gefüllt werden.
Das ganze soll dann mal in Echtzeit von 100 evt. sogar 200 Hz laufen, wobei pro Element der 1 Dimension bis zu 30 (?) Elemente in der zweiten Dimension aufgezeichnet werden...
Mann, mann, gar nicht so einfach auszudrücken, umgangssprachlich. Aber der Code ist zu lang zum Posten. Ausserdem langweilig. Ich hoffe, Du hast trotzdem einen Eindruck, worum es geht.
Na, jedenfalls läuft es im Augenblick schon. Zumindest manchmal. Und erst bei 40 Hz getestet. Aber das ist alles sehr unelegant und fehleranfällig. Zeigerarrays gemischt mit dynamischen Arrays aus sysdyn.h (<-wobei ich das nur zufällig gefunden habe und inzwischen vermute, dass es sich um Borland-interne Kompatibilität zu Delphi handelt)
-
Nabend,
hast du nicht die Moeglichkeit, eine kleine Testumgebung zu erstellen, um zu
testen ob vector dir hier einen gravierenden Nachteil verschafft?Falls du den Code doch posten moechtest, dann kannst du das z. B. auf rafb.net
machen und den entsprechenden Link hier posten.mfg
v R
-
sonst schreib dir halt selber eine kleine vector klasse und speicher da size ab..
-
warum muß es den gerade der Borland sein? Aus deinen ersten Postings entnehme ich, dass du nicht viel Zeit hast , um dich mit um solche implementierungsdetails zu kümmern, also nimm doch einfach einen Compiler mit 'ner vernünftigen STL - Implementierung und fertig : Dev-C++ finde ich für den Zweck nicht schlecht - vorrausgesetzt du mußt keine umfangreiche GUI erstellen. Bei Deinem Vorwissen würde ich auch vom Versuch einer eigenen Implementierung absehen - aus eigenen Erfahrungen : da kommt mit vertretbarem Aufwand nichts gescheites bei raus.
-
versuch mal den vector mit resize vor dem füllen schon auf eine gewisse größe zu bringen, dann gehts nochmal schneller ...
-
Allen hier ein herzliches Dankeschön! Sehr erfreulich, dass es noch hilfsbereite Menschen gibt...
Natürlich muss es nicht Borland sein. Liegt einfach daran, dass ich mit Delphi ins Programmieren "wiedereingestiegen" bin, da ich damals als Schüler (als man noch VIEL Zeit hatte) mit Turbo Pascal programmiert habe. Mann, mann, eine Eingabemaske, die heute in 1 min fertig ist, dauerte damals ne Woche... Na, jedenfalls lag der Builder da nahe.
@v R
ja, ich denke, ich probiere tatsächlich vectors und Zeigerarrays aus und messe mal. Das sollte sogar ich eigentlich in ´nem vertretbaren Zeitrahmen hingekommen. Nur leider muss ich mich nebenbei auch um den experimentellen Aufbau kümmern, weshalb ich nicht sofort anfangen kann.
Den Trick von ´stefan_guest5´ werd ich natürlich auch probieren und wenn nicht, mir nochmal ´life´s Vorschlag durchlesen. Aber naja, wie TheBigW schon schreibt, das wird wahrscheinlich eh nix...
Also nochmals vielen Dank an alle!
Retronade
-
Retronade schrieb:
Den Trick von ´stefan_guest5´ werd ich natürlich auch probieren...
Das wuerd ich in der Tat machen. Dann muss naemlich vom vector nicht staendig
neuer Speicher reserviert und die Daten umkopiert werden.mfg
v R
-
Ich muss doch nochmal nerven:
Sehe ich das richtig, dass es nix bring, die erste Dimension des geschachtelten vectors mit resize schon mal zu vergössern? Weil ja die zweite Dimension weiterhin erstmal null ist und der Speicherbereich ja dann doch andauernd umkopiert werden muss, während die Anzahl der Elemente in der zweiten Dimension zunimmt. Oder?
Schade, weil die Anzahl der Elemente der ersten Dimension kann ich sehr gut im Voraus abschätzen.
P.S.: Die ersten Versuche mit dem 2dim Zeigerarray sind nicht sehr ermutigend. Ohne die Elementanzahl zu kennen, ist das alles ein wenig unschön. Vorallem scheint es mir, als ob die dadurch notwendigen Überprüfungen tatsächlich noch mehr Zeit schlucken...
-
Sehe ich das richtig, dass es nix bring, die erste Dimension des geschachtelten vectors mit resize schon mal zu vergössern? Weil ja die zweite Dimension weiterhin erstmal null ist und der Speicherbereich ja dann doch andauernd umkopiert werden muss, während die Anzahl der Elemente in der zweiten Dimension zunimmt. Oder?
ich denke das siehst Du falsch. Ein Vector-Objekt an sich ist immer gleich groß, egal wie viel drin ist. Es hat halt nen Zeiger auf den Speicherbereich, wo der Inhalt ist. Und der Zeiger ist natürlich immer gleich groß. Deswegen is Deine Dimension-1-Vektor völlig unabhängig von der Größe deiner Dimension-2-Vektoren. D.h. wenn Du in der zweiten Dimension was dazukommt, muss in der ersten nix umkopiert werden.
Und erhoff Dir nicht zu viel vom dem Resize. Die vektor-Implementierung wird aller wahrscheinlichkeit nach je mehr Speicher im Voraus reservieren, je desto schon drin ist.
Hast mit 100 Einträgen die maximale Kapazität erreichst, wird er Platz für 200 neu reservieren. Bei 1000 Einträgen dann 2000.
Das kannst Du also benutzen, um von Anfang an auf ne vernüftige Größe zu kommen, während des Programmlaufs würd ich dann aber nicht mehr mords rumdrehn.
-
Edit, weil ich Grundsatz "Erst Hilfe benutzen, dann doofe Sachen fragen" nicht beachtet habe...