Abhängig von der Version des C-Compilers und Compiler-Flags ist es möglich, Variablen an beliebigen Stellen in Ihren Funktionen zu initialisieren (soweit mir bekannt ist).Speicherzuordnung von Funktionen und Variablen in C
Ich bin es gewohnt, alle Variablen an der Spitze der Funktion zu setzen, aber die Diskussion über die Speicherbenutzung der Variablen begann, wenn an irgendeiner anderen Stelle in der Funktion definiert.
Im Folgenden habe ich 2 kurze Beispiele geschrieben, und ich fragte mich, ob jemand mir erklären könnte (oder verifizieren), wie der Speicher zugewiesen wird.
Beispiel 1: Die Variable y ist nach einer möglichen return-Anweisung definiert, es besteht die Möglichkeit, dass diese Variable aus diesem Grund nicht verwendet wird, soweit mir bekannt ist und der Code (Speicherbelegung)) wäre dasselbe, wenn die Variable an der Spitze der Funktion platziert wäre. Ist das richtig?
Beispiel 2: Die Variable x wird in einer Schleife initialisiert, was bedeutet, dass der Gültigkeitsbereich dieser Variablen nur innerhalb dieser Schleife liegt, aber was ist mit der Speicherbenutzung dieser Variablen? Wäre es anders, wenn es oben auf den Funktionen platziert würde? Oder einfach auf dem Stack beim Funktionsaufruf initialisiert?
Edit: Zum Abschluss einer Hauptfrage: Hat das Reduzieren des Gültigkeitsbereichs der Variablen oder das Ändern des Speicherorts der ersten Verwendung (also anderswo statt oben) irgendwelche Auswirkungen auf den Speicherverbrauch?
Codebeispiel 1
static void Function(void){
uint8_t x = 0;
//code changing x
if(x == 2)
{
return;
}
uint8_t y = 0;
//more code changing y
}
Code-Beispiel 2
static void LoopFunction(void){
uint8_t i = 0;
for(i =0; i < 100; i ++)
{
uint8_t x = i;
// do some calculations
uartTxLine("%d", x);
}
//more code
}
In Ordnung, so bedeutet dies, es tatsächlich effizienter ist es auf diese Weise zu codieren, anstatt alle Variablen an der Spitze der Putten, wo es nicht klar sein kann, wenn es aus ist Umfang oder wann wird es verwendet werden? Oder ist das noch egal? – koldewb
@koldewb Es ist nicht wichtig für den Compiler, weil es den Bereich der aktiven Verwendung Ihrer Variablen herausfinden und Speicher entsprechend zuordnen kann. Es ist jedoch sehr wichtig für Leute, die Ihren Code lesen, also ist es besser, Variablen an Orten zu platzieren, an denen sie verwendet werden, als alles oben zu deklarieren. – dasblinkenlight