Hi was macht diese Funktion eigentlich (STM32 USB library): Wird bei jedem Aufruf ein neuer array mit dem Namen mem angelegt? Sieht ganz danach aus.
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
[Mod: c-Tags eingefügt]
|
Anzeige
|
GCC und static deklarierung von arraysHi was macht diese Funktion eigentlich (STM32 USB library): Wird bei jedem Aufruf ein neuer array mit dem Namen mem angelegt? Sieht ganz danach aus.
[Mod: c-Tags eingefügt]
Nein. Static-Variablen existieren nur einmal im Speicher - und das über die komplette Laufzeit. Die Funktion gibt jedes mal dieselbe Adresse auf denselben Speicherbereich (Array) zurück. Übrigens: Das Argument dieser Funktion wird komplett ignoriert. (Ja, die STM32-USB-Library ist etwas gewöhnungsbedürftig und wirft bei entsprechendem Warning-Level jede Menge von Warnungen.) Das sieht aus wie ein Hack, wo eine Funktion "USBD" ein malloc braucht, aber das Framework keines bereitstellen soll. Es wird gleichzeitig nur genau ein Block gebraucht. Vermutlich wird das malloc an mehreren Stellen aufgerufen aber dazwischen immer wieder freigegeben. (Ansonsten hätte man sich die Funktion schenken können und den Speicher direkt am Aufrufort legen können)
wobei "_malloc" ein ziemlich blöder Name für diese Funktion ist. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|