VC++ großes Array -> lange compilieren

OP #3712183
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
> 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.
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
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.
Moderator
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
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
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.