Hallo zusammen,
ich habe in einer wachen Minute heute Nacht festgestellt, daß ich nicht
verstanden habe, wie der Linker arbeitet. Ich habe in einem Projekt in
unterschiedlichen c-Dateien globale Variablen mit dem gleichen Namen
aber unterschiedlichen Größen deklariert, also z.B.
1 | //Datei1.c:
|
2 | uint8_t gl_buffer[100];
|
3 |
|
4 | ...
|
5 |
|
6 | //Datei2.c:
|
7 | uint8_t gl_buffer[64];
|
8 |
|
9 | ...
|
10 |
|
11 | //Datei 3.c:
|
12 | uint8_t gl_buffer[1024];
|
(Das war keine Absicht, sondern ist meiner Phantasielosigkeit bei der
Namensgebung geschuldet.)
Initialisiert werden die Arrays nie, sondern nur bei Bedarf gefüllt. Und
offensichtlich steht der große Puffer auch zur Verfügung, ansonsten
wären die Auswirkungen eines Speicherüberlaufs (hoffentlich) schon zu
merken gewesen. Und die Arrays werden auch nicht stillschweigend zu
"static" erklärt, sonst wäre die Gesamtgröße größer als der SRAM.
Aber was macht der Linker an dieser Stelle?
Viele Grüße
W.T.