Parameterübergabe als Struktur oder einzeln?

Gast #296417
Lesenswert?

Hallo,
ich habe da mal eine Frage zur Parameterübergabe an Funktionen.
Ich schreibe ein Programm in C. In der Main-Funktion werden ca. 30
Werte aus einer Config-Datei in (bis jetzt) lokale Variablen
eingelesen.
Nun habe ich eine Funktion in der 10 dieser Variablenwerte benötigt
werden. Wie übergebe ich der Funktion diese Werte am
effizientesten/besten?
Sollte ich die Variablen in der Main-Funktion als Struktur anlegen und
dann der Funktion einen Pointer auf diese Struktur übergeben, oder alle
Werte einzeln übergeben?
Globale Variablen soll man ja wenn möglich vermeiden.

Danke für Hinweise
Gast #296419
Lesenswert?

Wenn wir von C reden ist ein spointer auf eine struktur am sinvollsten,
wenn du viel speicher hat kannst du auch eine stukur komplett
übergebn,.. das ist dann jedesml eine lokale kopie im ram.
Wenn es um C++ geht mache ich meist objekte und übergebe das komplette
objekt.

Sebastian
Gast #296420
Lesenswert?

Ich hab auch mal 'ne C frage.

Wenn ich in meiner funktion ein wenig Speicher benötige, ab wie viel
bytes sollte ich dann malloc() benutzen? Wenn ich in einer funktion zB
ein 512 byte array definiere landet das ja auf den stack,was vielleicht
nicht so gut ist, aber ein malloc aufruf kostet ja auch etwas Zeit.
#296421
Lesenswert?

@Lupin:
Das hängt von den Gegebenheiten ab. Auf einem PC kannst du völlig
problemlos 512 Bytes auf den Stack legen. Auf einem Mikrocontroller
vielleicht nicht, nur gibt es z.B. bei den AVRs keine Unterscheidung
zwischen Stack und Heap-Speicher im Sinne von getrennten "Segmenten".
Das heißt, der Speicher ist so oder so weg, egal wo du das Array
hinlegst.
#296423
Lesenswert?

In einem Unterprogramm mach sie lokal. Sie verschwindet wieder vom Stack
wenn du das Unterprogramm verlässt.
malloc nimmt man bei großem Speicherbedarf (so ab 64kB) und vor allem
wenn die benötigte Größe unbekannt ist, die kann man dann schön mir
realloc verändern.

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