globale Arrays

schickano

Grünschnabel
Servus Leutz!

In meinem Programm werden viele Funktionen aufgerufen und sehr oft die selben Arrays übergeben. Momentan findet die Übergabe durch Speicheradressen ( "call by reference") statt.

Hat die Nutzung von globalen Arrays denselben Effekt hat wie "call by value"?

Würdet Ihr mir empfehlen die Arrays global zu deklarieren oder aus Perfomance- und Speicherplatzgründen weiterhin den Zeiger zu benutzen?
 
Programmierst du in C++ oder in C?

Bei solchen Sachen empfiehlt es sich in der Regel auch mal zu schauen, was für einen ASM-Output der Compiler erstellt. Da kannst du relativ leicht feststellen, wie das aufwandmässig aussieht. So rein intuitiv stelle ich mir vor, dass call by reference gegenüber einer globalen Variabeln höchstens eine push-Instruktion mehr verwendet.
 
Da es in C++ eigentlich praktisch gesehen so gut wie nie nötig ist ein altes C-Array zu verweden (daher sollte man es auch nie tun). Der dynamische und sichere Ersatz dafür ist std::vector.

Ausserdem ist natürlich auch die Frage, warum der OP nicht Klassen verwendet, sondern offensichtlich ungebundene Funktionen. In C++ sollte man den OOP-Ansatz so weit als möglich verfolgen. Wer lieber prozedural und mit C-Arrays arbeiten will, der soll sich nach dem C-Standard richten. Mischen ist gefährlich und führt i.d.R. zu instabilem Code.
 
Wenn man weiß, was man tut, dann ist ein nicht OOP- Ansatz auch in c++ sinnvoll und bietet genügend mehr Komfort (aus meiner Sicht) als reines c. Wichtig ist immer zu wissen was man genau tut und nicht einfach irgendetwas ausprobieren und darauf warten, dass es dann mal läuft. Viel wichtiger als die Frage OOP/Prozedural ist m.E. der richtige Umgang mit Zeigern, Exceptions und Threads/Prozessen.

Zur Frage: globale Arrays werden nicht zigfach kopiert (zumindestens bei mir nicht) sondern nur Referenzen verteilt.
Den einzigen Nachteil von globalen Arrays (,dass man vergessen hat, dass es global ist (und z.B. ganz woanders verändert wurde)) sollte man mit einer entsprechenden Schreibweise kompensieren; z.B. g_meinArray.

mfg kickerxy
 
Zuletzt bearbeitet:
Es gibt praktisch keine Anwendung in der du einen prozeduralen Ansatz benutzen musst. In allen anderen Fällen gibt es keinen Grund das zu tun. Inkosistenz führt spätestens bei grösseren Projekt zu Verwirrung, Instabilität und mühsamen Fehlern.
 
Es gibt praktisch keine Anwendung in der du einen prozeduralen Ansatz benutzen musst. In allen anderen Fällen gibt es keinen Grund das zu tun. Inkosistenz führt spätestens bei grösseren Projekt zu Verwirrung, Instabilität und mühsamen Fehlern.

Genau so wie ein nicht 100%ig durchdachter objektorientierter Ansatz sehr schnell zu einer Qual werden kann.
 
Zurück