GCC und static deklarierung von arrays

OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.