Hallo, wenn ich beispielsweise ein Array "uint32_t test[1000]" global erzeuge erhalte ich beispielsweise diese Code-Größe: text data bss dec hex filename 78394 1608 63928 143930 2323a test.elf Definiere ich dieses Array jedoch lokal innerhalb der Funktion, erhalte ich dieses Code-Größe: text data bss dec hex filename 78406 1608 63928 143942 23246 test.elf Wie kommt es, dass das lokale Array plötzlich nicht mehr in der Code-Größe auftaucht? Es muss doch trotzdem im Speicher angelegt werden.
dumfbacke schrieb: > Wie kommt es, dass das lokale Array plötzlich nicht mehr in der > Code-Größe auftaucht? Auf welche Zahl genau beziehst Du Dich?
dumfbacke schrieb: > Wie kommt es, dass das lokale Array plötzlich nicht mehr in der > Code-Größe auftaucht? Es muss doch trotzdem im Speicher angelegt werden. Ja. Aber erst zur Laufzeit. Und ohne aufwändige Analyse kann kein Tool dieser Welt beispielsweise herausfinden, ob die Funktion im Programmlauf überhaupt je aufgerufen wird. Zumal das ja des öfteren auch von diversen Input-Werten abhängt.
:
Bearbeitet durch User
Das Array wird nicht im Code angelegt, nur die Initialisierungswerte. Wenn das Array als statische Variable erzeugt wird liegt sie im data Segment, innerhalb einer Funktion ist es eine 'automatische' Variable die auf dem Stack (bss) landet. Der bss Wert ändert sich trotzdem nicht, in deinem Fall ist einfach der Rest 64k - data size. Der Compiler weiss nicht wie tief verschachtelt deine Funktion aufgerufen wird, bei rekursivem Aufruf werden ja jedesmal sizeof(variable) gebraucht. In deinem Beispiel ändert sich die data Grösse nicht, das passt also nicht. Wenn du das Array nur zum Testen angelegt hast und es nicht benutzt wird dann hat der Compiler das evtl. wegoptimiert. Also probiere das nochmal (als statische Variable) anzulegen und im Code auch darein zu Schreiben, dann muss sich data um 4000 vergrössern.
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.