Dynamisches Array

Gast #849600
Lesenswert?
• ▲
▼
Hallo und einen guten Tag zusammen...

Ich habe ein Array und seine größe als globale Variable definiert !

also:

unsigned char NUM_BYTES;
unsigned char array[NUM_BYTES];

Der Compiler meckert natürlich, da es sich nicht um eine feste 
Arraygröße handelt ! Ich bräucht maximal 19 BYTES, also müsste ich 
irgendwie einen Speicherbereich festlegen ! Wie würde das gehen ? mit 
malloc ?

Vielen Dank für eure Hilfe
#849613
Lesenswert?
• ▲
▼
@ Hans M. (Gast)

>Der Compiler meckert natürlich, da es sich nicht um eine feste
>Arraygröße handelt ! Ich bräucht maximal 19 BYTES, also müsste ich
>irgendwie einen Speicherbereich festlegen ! Wie würde das gehen ? mit
>malloc ?

Und was hindert ich, einfach zu schreiben
1
unsigned char array[19];


???

Malloc geht theoretisch, der Aufwand ist aber nicht gerechtfertigt.

@ Sven Woehlbier (woehlb)

>Würde ein malloc() auf einem Mikrocontroller ohne Betriebssystem den
>überhaupt funktionieren?

Ja, ist auf den meisten vorhanden. Ist aber selten sinnvoll.

MFg
Falk
#849617
Lesenswert?
• ▲
▼
Falk Brunner wrote:

>>Würde ein malloc() auf einem Mikrocontroller ohne Betriebssystem den
>>überhaupt funktionieren?
>
> Ja, ist auf den meisten vorhanden. Ist aber selten sinnvoll.
>

Vor allem dürfte alleine die für malloc notwendige Verwaltungs-
information wahrscheinlich mehr Platz im SRAM beanspruchen
als die von Zeit zu Zeit nicht benutzten 8 oder 10 Bytes des
fix dimensionierten Arrays.
Gast #849620
Lesenswert?
• ▲
▼
Hallo und danke für eure Antworten: Ich greife mal das von SVEN auf :

Mach doch einfach folgendes:

#define NUM_BYTES 19
unsigned char array[NUM_BYTES];

So sind zwar die 19Bytes ständig belegt,aber solange du keine
Platzprobleme im RAM hast.

Tschau Sven!
_____________

Kann ich dann nachträglich die Variable NUM_BYTES noch ändern ? Also 
irgendwo im Hauptprogramm ?

z.B

....
NUM_BYTES = 14;
....

???

Danke
#849628
Lesenswert?
• ▲
▼
Hans M. wrote:
> Kann ich dann nachträglich die Variable NUM_BYTES noch ändern ? Also
> irgendwo im Hauptprogramm ?
NUM_BYTES ist keine Variable, sondern ein Präprozessor-Makro!

==> Empfehlung: C-Buch lesen...

BTW:
Kann C99 nicht sogar Arrays mit variabler Länge ohne malloc? (OK, dass 
das dann alles im Hintergrund läuft und dementsprechend nicht weniger 
Ressourcen braucht als mit malloc ist klar...)
Gast #849873
Lesenswert?
• ▲
▼
Mal eine bescheidene Frage - welchen Sinn sollte es machen, ein Array 
zur Laufzeit zu vertkleinern? Was willst Du mit den restlichen 5 Bytes? 
Selbst wenn der Speicher knapp ist, müßtest Du Dein Programm so 
organisieren, dass Du dann wonders mehr Speicher nutzt, wenn gerade die 
kleine Array-Größe gebraucht wird. Das macht in meinen Augen nur auf 
einem PC Sinn, wo mehrere Applikationen sich den Speicher teilen müssen 
und temporär große Datenmengen verarbeitet werden müssen.
Bei lokalen Variablen sollte es aber dennoch funktionieren, da bei denen 
die Größe zur Compilezeit nicht bekannt sein muß, da sie eh auf dem 
Stack oder in Registern abgelegt werden.

Gruß Matthias
Gast #850013
Lesenswert?
• ▲
▼
> BTW:
> Kann C99 nicht sogar Arrays mit variabler Länge ohne malloc?

Nein. Es kann allerdings lokale Arrays mit zwar fester, aber zur 
Laufzeit bestimmter Größe. Overhead sollte das kaum haben. Für globale 
Arrays funktioniert das logischerweise nicht, denn die existieren ja 
schon beim Start von main(), und zu diesem Zeitpunkt hätte man ja zur 
Laufzeit noch gar keine Größe vorgeben können.
#850023
Lesenswert?
• ▲
▼
Rolf Magnus wrote:
>> BTW:
>> Kann C99 nicht sogar Arrays mit variabler Länge ohne malloc?
>
> Nein. Es kann allerdings lokale Arrays mit zwar fester, aber zur
> Laufzeit bestimmter Größe. Overhead sollte das kaum haben. Für globale
> Arrays funktioniert das logischerweise nicht, denn die existieren ja
> schon beim Start von main(), und zu diesem Zeitpunkt hätte man ja zur
> Laufzeit noch gar keine Größe vorgeben können.
Klar, bei globalen Arrays macht es keinen Sinn...
Gast #850032
Lesenswert?
• ▲
▼
ein array ist grundsätzlich kein dymamischer datentyp. Bei 19 Elementen 
kanst du manipulieren was du wilst, du wirst dein ziel, reccourcen zu 
sparen sicher nicht erreichen, das gegenteil jeodch ziemlich sicher...

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