Hallo!
Habe unter Visual C++ in einer Funktion ein lokales Array("const
unsigned int Encoder_Soll[] = {0,544998,770746,943969,1090004,...." ca.
254648 Byte groß).
Nachdem ich dieses Array angelegt habe dauert das compilieren etliche
Minuten. Vorher waren es nur Sekunden.
Hat jemand ne Idee wie man das compilieren beschleunigen könnte?
Viele Grüße
PS: mein Rechner ist schnell genug :-)
"Das Compilieren" dauert lange - das des gesamten Projektes oder auch das Übersetzen nur des einzelnen Moduls? (Letzteres kannst Du mit Ctrl+F7 erreichen)
Mach ein make file, lager den lange dauernden Teil in ein eigenes C File aus. Dann wird nur noch 1 mal lange compiliert solange du an diesem Teil nichts änderst.
Udo Schmitt schrieb: > Dann wird nur noch 1 mal lange compiliert solange du an diesem Teil > nichts änderst. Dafür braucht es kein makefile, das bekommt die Projektverwaltung von Visual Studio tatsächlich auch selber hin.
Rufus Τ. Firefly schrieb: > Dafür braucht es kein makefile, das bekommt die Projektverwaltung von > Visual Studio tatsächlich auch selber hin. Nicht wenn man dann immer "Rebuild all" (oder wie das in VisualStudio heisst) aufruft :-)
Udo Schmitt schrieb: > Nicht wenn man dann immer "Rebuild all" (oder wie das in VisualStudio > heisst) aufruft :-) Das macht das gleiche wie make clean make all Hmm? Was war jetzt noch mal der Unterschied?
Nimm einfach einen anderen Compiler. GCC braucht auf meiner alten Gurke (T7500 mit 2,20GHz) gerade mal 0,167s.
Gast
#3712324
> Habe unter Visual C++ in einer Funktion ein lokales Array("const > unsigned int Encoder_Soll[] = {0,544998,770746,943969,1090004,...." ca. > 254648 Byte groß). macht es global, so Datenmengen sollte man nicht auf den Stack legen. Global compiliert schneller.
Gast
#3712342
Danke für eure Ideen. Werde sie mal testen. VG
Gast
#3712347
Yalu X. schrieb: > Nimm einfach einen anderen Compiler. GCC braucht auf meiner alten Gurke > (T7500 mit 2,20GHz) gerade mal 0,167s. Global oder lokal? Global dauert beim VS auch nur eine Sekunde.
Wenn sich die Werte ncht ändern, sollte es sowieso const sein, dann stört auch ein static nicht und es liegt nicht mehr auf dem Stack. Global ist eine technische Lösung, aber wenn das Feld nur lokal verwendet werden soll, ist global der erste Schritt zu einem schlechten Programm. Mit static const vermeidet man die globale Variable.
Gast
#3712357
Wobei man bei so vielen Werte schon darüber nachdenken kann, sie überhaupt nicht in der EXE zu haben. Die könnte man als extra Datendatei mitliefern.
foo schrieb: > Global oder lokal? > Global dauert beim VS auch nur eine Sekunde. Stimmt, ich habe übersehen, dass das Array lokal sein soll. Wenn ich es zusammen mit etwas Code, der darauf zugreift, in eine Funktion packe, braucht der Compiler 0,217s, also deutlich länger ;-) Wenn ich noch ein "static" davor schreibe, was sich bei großen Variablen wie dieser sowieso anbietet, werden 0,189s benötigt.
Gast
#3712691
Global fällt aus. Arbeite unter VC++ CLI und mit Threads. Hatte CLI mal nicht erwähnt um mir die Kommentare zu ersparen. Das mischen vom Managed und unManaged Code gefällt dem Compiler nicht. Mit dem Auslagern in eine extra Datei versuche ich später mal. Beim STM32 hat das aber nichts gebracht. Dort ist sie aber zum Glück global.
Gast
#3712693
Deepdiver99 schrieb: > Global fällt aus. Arbeite unter VC++ CLI und mit Threads. und? das ding ist const. damit kann man auch mit 100Threads gleichzeitig zugreifen.
Gast
#3712695
Hast Du das probiert? Mit static? Wenn du unbeding Functions-lokal haben willst.
1 | |
2 | |
3 | |
4 | |
sonst halt Filescope:
1 | |
Deepdiver99 schrieb: > Arbeite unter VC++ CLI Ah. Das ist gar kein C++, sondern eine .Net-Sprache.
Gast
#3712705
Rufus Τ. Firefly schrieb: > Deepdiver99 schrieb: >> Arbeite unter VC++ CLI > > Ah. Das ist gar kein C++, sondern eine .Net-Sprache. außer wenn CLI für Command Line Interface steht.
Deepdiver99 schrieb: > Arbeite unter VC++ CLI und mit Threads. Du meinst also MS VS C++/CLI? (um mal die Abkürzungen komplett zu machen)
Peter II schrieb: > außer wenn CLI für Command Line Interface steht. Tut es nicht.
Ja, meine MS VS C++/CLI. Mit dem Auslagern in eine separate Klasse hat es geklappt. Danke für die Hilfe :-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.