PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Embedded C: bringt "static" Performanz?


mekakic
2011-03-30, 13:44:28
Wenn es auf jedes bißchen Performanz ankommt, kann es Vorteile bringen innerhalb von Funktionen Variablen als static zu markieren?


void foo()
{
static uint16_t var0 = 0;
uint16_t var1 = 0;

var0 = 42;
var1 = 43;
}
Wird var0 jetzt global angelegt und aber mit dem Scope auf foo()? D.h. bei mehrfachem Aufrufen landet immer nur wieder var1 auf dem Call-Stack? Kann man dadurch Performanz erhöhen, einfach indem man das erneute Ablegen auf dem Stack vermeidet und die Variablen schon im Speicher hat (aber eben mit dem Vorteil der begrenzten Sichtbarkeit)? Unter der Vorraussetzung, dass ich genügend Speicher habe aber eher mit der Laufzeit Probleme?

Bringt das was? Oder muß es dazu erst was größeres sein? Lokale Arrays, die man zum Beispiel nicht global definieren möchte?

Trap
2011-03-30, 14:06:33
Das ist eigentlich eine Frage die du dir einfach selbst beantworten kannst, entweder durch testen oder durch Betrachten des generierten Machinencodes.

Es dürfte nichts bringen, die Anzahl der Bytes auf dem Stack macht keinen Unterschied im Aufwand.

Nighthawk13
2011-03-30, 16:17:16
Auf dem PC sind Variablen auf dem Stack tendenziell schneller, da der entsprechende Speicher im Normalfall im Prozessorcache liegt und die Adressierungberechnung bei x86 geschenkt ist(Stackpointer+Offset).

Auf Embedded-CPUs sieht das evtl aber anders aus(Ohne Cache / Instruktion benötigt um die Adresse zu berechnen)

Kurze Antwort: Probiers aus;)