2012-06-09 5 views
6

Ich frage mich, ob es möglich ist, zu löschen, das heißt, aus der Verwendung entfernen, eine C-Variable, sagen wir zum Beispiel, sobald die Variable einmal verwendet wird?Kann eine C-Variable während der Ausführung eines Programms jederzeit gelöscht oder entfernt werden?

Ich habe vor einiger Zeit über dieses Thema nachgedacht, und eine Frage entstand in meinen Gedanken.

C viele Datentypen hat und wir können eine Variable vom Datentyp, sagen integer durch den einfachen Code

int i;

erstellen Sobald wir eine Variable auf diese Weise erstellt haben, wie wir ‚Löschen‘ wenn wir es in Zukunft nicht benötigen?

Ich suchte im Internet, fand aber keinen C-Befehl, der das tut. Mit "k ist gelöscht", ich meine "k hat aufgehört zu existieren". Ich meine, sobald wir die Variable nicht brauchen, ist es eine Verschwendung und sollte entfernt werden.

C stellt die free()-Funktion bereit, aber es funktioniert nur für Speicher, der unter Verwendung von calloc(), malloc() oder realloc() zugewiesen wurde.

Also, wie entfernt man zum Beispiel eine int Variable, sobald sie verwendet wurde?

Antwort

13

Sie nicht. Die Lebensdauer des Objekts endet, sobald es den Gültigkeitsbereich verlässt (es wird als automatisch Objekt bezeichnet, da es automatisch bereinigt wird).

z.B.

void foo() { 
    int j = 3; 

    while (blah) { 
     int i = 5; 
    } 

    // i no longer exists 
} 

// j no longer exists 
+0

Vielen Dank, aber was ist, wenn eine Variable verbraucht ist und immer noch im Bereich? Kann man das entfernen? –

+3

@NihalPednekar: Nein. Aber Sie sollten bedenken, dass der Compiler sehr gut in der Optimierung der Stack-Nutzung ist; die meisten Ihrer lokalen Variablen werden wahrscheinlich niemals im Hauptspeicher vorhanden sein! –

+0

Ich sehe. Danke vielmals :) . –

5

In C gibt es das Konzept der Speicherdauer ein Objekt, das seine Lebensdauer bestimmt:

  • statische Speicher Leben für die gesamte Ausführung des Programms
  • Fäden Speicher lebt bis zum Fadenabbruch
  • automatische Speicherung Leben bis dem umgebenden Block wird
  • links
  • zugewiesenen Speicher über explizite de-Zuweisung muss free()

Zugewiesene Lagerung beiseite, die Language Runtime wird Speicher zurückzufordern kümmern (zB den Stapelzeiger abnehmend Anruf zu verwerfen Frames, die den automatischen Speicher freigeben.

+0

Fadenspeicherung existierte nicht bis C11, was noch nicht weit verbreitet ist (AFAIK). –

+0

Thread (-local) Speicher existierte vor C11 über Spracherweiterungen, zB '__thread' in gcc und' __declspec (thread) 'in MSVC – Christoph

Verwandte Themen