wann wird eine static variable angelegt?
-
Hallo,
Eine embedded Frage:
ich möchte dass meine static variable vom linker sichtbar ist,
also nach dem compilieren im map file landet.Landet sie dort wenn ich sie innerhalb einer funktion definiere?
Im moment ist sie noch im c-file ausserhalb einer funktion definiert,
also modulgrobal.Mich interessiert also wann sie angelegt wird. Während des Compiliervorgangs oder
erst während der Laufzeit, wenn sie in der Funktion drin ist.
-
http://www.codeproject.com/KB/debug/mapfile.aspx
embeddedC schrieb:
Landet sie dort wenn ich sie innerhalb einer funktion definiere?
wie wärs mit ausprobieren, mapfile angucken?
-
Angelegt kann sie nur zur Laufzeit werden!
-
embeddedC schrieb:
... ich möchte dass meine static variable vom linker sichtbar ist, ... Mich interessiert also wann sie angelegt wird. Während des Compiliervorgangs oder erst während der Laufzeit, wenn sie in der Funktion drin ist.
static ist static, d.h. ALLE statics sind während des gesamten Programmlaufs persistent. Jeder ordentliche Mapfilegenerator sollte damit umgehen können.
Du verwechselst das u.U. mit der Initialisierung. Gesamtglobale statics müssen vor mainentry initialisiert sein, soweit ich das düster im Hinterkopf habe, werden dabei die modulinternen statics mitgezogen, heißt, alle statics sind initialisiert, bevor main() loslegt.
Aus Performance- Erwägungen sinnvoll und nachvollziehbar, ob das allgemeingültig oder gar Vorschrift ist, weiß ich leider nicht.
-
Folgende Ergebnisse nach Probieren:
- Variable static und ausserhalb der Funktion:
-> nicht in MAP File, aber in ELF File- Variable nicht static (auto) und ausserhalb der Funktion
-> ja im MAP File, und auch im ELF File- Variable static und in Funktion
-> nicht im MAP File aber im ELF File- Variable nicht static (auto) und in Funktion
-> nicht in MAP File und auch nicht im ELF FileOk es etwas ändert wenn sie initialisiert sind habe ich nicht probiert.
So was folgern wir nun daraus?
Nur globale Variablen landen im MAP file? Static Variablen nicht!
Wieso haben sie dann im ELF File adressen?
-
pointercrash schrieb:
Gesamtglobale statics müssen vor mainentry initialisiert sein, ...
wtf sind gesamtglobale statics
-
^^variablen ausserhalb von funktionen, mit 'nem 'static' davor, sind per definition von aussen nicht sichtbar. deshalb kann der compiler sie sofort verwurschteln und muss keinen namen o.ä. exportieren. das ist vestimmt der grund, warum sie im mapfile nicht auftauchen.
-
mit gesamtglobal meinte ich natürlich modulglobal.
aber im ELF File landen statics, egal ob in Funkrion oder modulglobal definiert.
Wer entscheidet was im map file landet? kann man da optionen beim linker einstellen?
-
Ok ich beantworte meine Frage selber:
ja man kann einstellen, was im map file landet, sogar modulglobale statics kann man da anzeigen lassen, ist halt bei mir ausgeschaltet.
Im elf file sind alle variablen drin, die zum copiliervorgang eine feste adresse haben, also auch alle statics. natürlich nicht die die zur laufzeit angelegt werden, z.b. funktionglobale auto variablensomit ist das auch geklärt
-
embeddedC schrieb:
Im elf file sind alle variablen drin, die zum copiliervorgang eine feste adresse haben, also auch alle statics.
mit namen? wenn du ohne debug-infos compilest/linkst, sind die bestimmt auch weg.
welchen prozessor und welchen compiler benutzte denn?
-
mit debug infos ja.
es ist der Tasking compiler für einen Infineon Tricore Chip