2016-06-29 2 views
0

Ich bin neu in der Computerprogrammierung. Ich studierte über Variablen und stieß auf eine Definition im Internet:Wo genau sind die Variablen in einem C-Programm gespeichert?

Variablen sind die Namen, die Sie Computerspeicherorten geben, die verwendet werden, um Werte in einem Computerprogramm zu speichern.

Was sind diese Speicherorte? Beziehen sich diese Speicherorte auf den tatsächlichen Speicher des Computers, oder ist dies nur ein Speicherauszug im Programm selbst, von dem aus diese Variablen später aufgerufen werden, wenn wir sie brauchen? Es gibt auch andere Begriffe, die ich hier auf Stack-Overflow wie Heap und Stack begegnet. Ich konnte mich nicht um sie kümmern. Bitte helfen Sie.

+1

Es hängt von der Speicherklasse der Variablen ab. –

+0

Es hängt auch davon ab, wo Sie die Variablen definieren. Und möglicherweise auf, wenn sie bei der Definition initialisiert werden oder nicht. –

+1

lesen Sie über Heap & Stack hier: http://StackOverflow.com/Questions/79923/what-and-where-are-the-stack-and-heap – CIsForCookies

Antwort

0

Die Art und Weise, wie Sie die Frage gestellt haben, legt nahe, dass Sie eine einzige Antwort erwarten. Das ist einfach nicht der Fall.

In einem groben Sinne werden alle Variablen im Speicher vorhanden sein, während Ihr Programm ausgeführt wird. Der Speicher, in dem Ihre Variablen existieren, hängt von mehreren Dingen ab.

Moderne Computer-Hardware hat oft eine ziemlich komplexe physische Speicherarchitektur - mit mehreren Ebenen von Cache (in der CPU und verschiedenen Peripheriegeräten), eine Reihe von CPU-Registern, Shared Memory, verschiedene Arten von RAM, Speichergeräte, EEPROMs usw. Verschiedene Systeme haben diese Arten von Speicher - und mehr Typen - in unterschiedlichen Proportionen.

Betriebssysteme können Ihrem Programm auf verschiedene Arten Speicher zur Verfügung stellen. Zum Beispiel kann es virtuellen Speicher bereitstellen, der eine Kombination aus RAM und reserviertem Festplattenspeicher verwendet (und Mappings verwaltet, so dass Ihr Programm den Unterschied nicht erkennen kann). Dadurch kann Ihr Programm mehr Arbeitsspeicher verwenden, als physisch als Arbeitsspeicher verfügbar ist. Dies wirkt sich jedoch auch auf die Leistung aus, da das Betriebssystem die Arbeitsspeichernutzung Ihres Programms zwischen Arbeitsspeicher und Festplatte austauschen muss (normalerweise um Größenordnungen langsamer).

Viele Compiler und Bibliotheken sind implementiert, um die Leistung Ihrer Programme zu maximieren (durch verschiedene Maßnahmen) - Compiler-Optimierung Ihres Codes (was dazu führen kann, dass einige Variablen in Ihrem Code gar nicht existieren) Eine Konsequenz daraus ist, dass der Compiler oder die Bibliothek Speicher auf unterschiedliche Weise verwenden kann (z. B. können einige Implementierungen Code in Ihre ausführbare Datei einbetten, um bei der Ausführung des Programms verfügbare Speicherressourcen zu erkennen) festgelegter RAM-Umfang), und die Nutzung kann sich im Laufe der Zeit sogar ändern.

+0

Die meisten modernen Computer haben keinen Cache und auch keinen übermäßigen Arbeitsspeicher. Die meisten Coouter haben eine MCU mit sehr begrenztem RAM/Flash. Sie sind den Computern mit vollwertigem Betriebssystem um Jahrzehnte überlegen. – Olaf