VC++ großes Array -> lange compilieren

OP #3712183
Lesenswert?
• ▲
▼
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 :-)
Gast #3712324
Lesenswert?
• ▲
▼
> 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.
#3712354
Lesenswert?
• ▲
▼
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.
Moderator #3712358
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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 #3712695
Lesenswert?
• ▲
▼
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, ...};

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren