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
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!
Würde ein malloc() auf einem Mikrocontroller ohne Betriebssystem den überhaupt funktionieren? Tschau Sven!
@ 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
Für einen Speichermanager gehen mehr als 19Byte drauf, ´malloc wird sich also wahrscheinlich nicht lohnen.
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.
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
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...)
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
> 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.
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...
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...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.