[C++] Mehrdimensionales dynamisches Array

Seite 1 von 4 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c_mehrdimensionales_dynamisches_array_44468/page_1 - zur Vollversion wechseln!


thorn][bySSG schrieb am 14.08.2002 um 08:21

Brauche da mal Hilfe!!

Weiß irgendwer wie man ein mehrdimensinales Array ( char - Feld ) zur Laufzeit generiert, bei einer Klasse ???

Ein einfaches is ja ka Prob, einfach mit dem new Operator, aber des ????:bash:


mfg
@lph4


that schrieb am 14.08.2002 um 09:05

Geht nicht. Abhilfe:

char *p = new char[x*y*z];

Oder du schaust dir die Collections der STL an, dann sparst du dir die Verwaltung überhaupt.

Was willst du denn speichern?


thorn][bySSG schrieb am 14.08.2002 um 09:41

Des Prob is, dos ich eine Prog schreiben muß was eine Veriloc Netlist bearbeitet und analysiert, dieses Ding hat fast eine Mille Zeilen:D .
Meine derzeitige Version arbeitet mit I/O und braucht exakt 9 h und 42 min zur abarbeitung.
Des muß ich beschleunigen.

Dachte da so an :

class xxx
{
private:

char * abc

}

und später dann

abs = new char[25] [200]

und dann noch ein paar Methoden zum import und export in andere Klassen.

Was meinst ?


Ringding schrieb am 14.08.2002 um 09:46

Nimm dir die Antwort vom that zu Herzen, aber bevor du irgendwas machst, lass dein Programm mal durch einen Profiler laufen. Da wirst du dann schon sehen, was zu tun ist.


that schrieb am 14.08.2002 um 09:55

Ich würde die Strukturen mit Klassen so auflösen, dass du keine mehrdimensionalen Arrays brauchst. Für Strings bietet sich z.B. die Klasse "string" an, und für jede Struktur in deiner Netlist (hab keine Ahnung, wie sowas ausschaut) eine eigene Klasse. Zum Speichern benutzt du dann vector, deque, map, list, oder was auch immer, von deiner Hauptstruktur.


thorn][bySSG schrieb am 14.08.2002 um 09:56

@Ringding

Versteh ich nicht


thorn][bySSG schrieb am 14.08.2002 um 10:01

Mit der Klasse string bin ich nicht so vertraut, hab mein Tut verlegt.
Ich brauch die komplette Netzliste im Speicher weil ich sie ca. 20 000 bei der Analyse verwende.
Mit I/O gehts zwar aber viel zu langsam, muß so schnell wie möglich sein.

Und schon langsam bin ich verzweifelt, keiner in der sch*** Firma kann mir da so richtig weiterhelfen.
Bin doch nur Praktikant.


Ringding schrieb am 14.08.2002 um 10:10

Du schreibst ein Programm, das 10 Stunden läuft und kennst keinen Profiler? Schäm dich!


Ringding schrieb am 14.08.2002 um 10:12

Wenn alle bis auf eine Dimension des Arrays fix sind, dann geht's schon:

typedef char mdim[1][7][21];
mdim *a = (mdim *) new char[sizeof(mdim) * 50];

Letztes Element ist dann (*a)[49][6][20];

Musst es halt dann mit delete[] (char *) a; freigeben.


thorn][bySSG schrieb am 14.08.2002 um 10:13

@Ringding

Was soll ich machen, Profiler sagt mir rein gar nix.

Bin zu der Aufgabe gekommen wie die Jungfrau zum Kind.


Ringding schrieb am 14.08.2002 um 10:15

Ein Profiler lässt dein Programm ablaufen und sagt dir nachher genau, welche Zeile und Prozedur wie oft ausgeführt wurde und wie lang jede Prozedur genau gebraucht hat. Dadurch siehst du dann sofort, wo die Performance-Flaschenhälse in deinem Programm sind.

Mit welcher Umgebung arbeitest du denn?


thorn][bySSG schrieb am 14.08.2002 um 10:16

Visual Studio


Ringding schrieb am 14.08.2002 um 10:20

Nix leichter als das. Schalt in den Linker Settings "Enable Profiling" ein, link neu, und dann führ aus dem "Build" Menü "Profile" aus. Und schon hast du's.


thorn][bySSG schrieb am 14.08.2002 um 10:28

@Ringding

Des Funkt !!!

Ich sag mal danke an alle und werd jetzt mal den Tag über versuchen des Prob zu lösen


xdfk schrieb am 14.08.2002 um 10:31

wenn das programm zu langsam ist: schnelleren pc kaufen :D :D

macht microsoft ja auch so ;)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026