GCC und static deklarierung von arrays

#7714180
Lesenswert?

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
  * @brief  Static single allocation.
3
  * @param  size: Size of allocated memory
4
  * @retval None
5
  */
6
void *USBD_static_malloc(uint32_t size)
7
{
8
  static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef)/4)+1];/* On 32-bit boundary */
9
  return mem;
10
}

[Mod: c-Tags eingefügt]

Moderator Persönliche Seite #7714185
Lesenswert?

Mat. K. schrieb:

Wird bei jedem Aufruf ein neuer array mit dem Namen mem angelegt?

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.)

#7714295
Lesenswert?

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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren