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.
> 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.
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.
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.
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.
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.
Hast Du das probiert? Mit static? Wenn du unbeding Functions-lokal haben willst.
1 | void foo(void) |
2 | {
|
3 | static const unsigned int big_array[] = {1,2,3,4, ...}; |
4 | }
|
sonst halt Filescope:
1 | static const unsigned int big_array[] = {1,2,3,4, ...}; |
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)
:
Bearbeitet durch User
Ja, meine MS VS C++/CLI. Mit dem Auslagern in eine separate Klasse hat es geklappt. Danke für die Hilfe :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.