Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Vorwort des Gutachters
1 Einstieg in C
2 Das erste Programm
3 Grundlagen
4 Formatierte Ein-/Ausgabe mit »scanf()« und »printf()«
5 Basisdatentypen
6 Operatoren
7 Typumwandlung
8 Kontrollstrukturen
9 Funktionen
10 Präprozessor-Direktiven
11 Arrays
12 Zeiger (Pointer)
13 Kommandozeilenargumente
14 Dynamische Speicherverwaltung
15 Strukturen
16 Ein-/Ausgabe-Funktionen
17 Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C)
18 Arbeiten mit variabel langen Argumentlisten – <stdarg.h>
19 Zeitroutinen
20 Weitere Headerdateien und ihre Funktionen (ANSI C)
21 Dynamische Datenstrukturen
22 Algorithmen
23 CGI mit C
24 MySQL und C
25 Netzwerkprogrammierung und Cross–Plattform-Entwicklung
26 Paralleles Rechnen
27 Sicheres Programmieren
28 Wie geht’s jetzt weiter?
A Operatoren
B Die C-Standard-Bibliothek
Stichwort

Download:
- ZIP, ca. 10,6 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch
Buch: C von A bis Z

C von A bis Z
3., aktualisierte und erweiterte Auflage, geb., mit CD und Referenzkarte
1.190 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1411-7
Pfeil 14 Dynamische Speicherverwaltung
Pfeil 14.1 Das Speicherkonzept
Pfeil 14.2 Speicherallokation mit »malloc()«
Pfeil 14.3 Das NULL-Mysterium
Pfeil 14.3.1 NULL für Fortgeschrittene
Pfeil 14.3.2 Was jetzt – NULL, 0 oder \0 ... ?
Pfeil 14.3.3 Zusammengefasst
Pfeil 14.4 Speicherreservierung und ihre Probleme
Pfeil 14.5 »free()« – Speicher wieder freigeben
Pfeil 14.6 Die Freispeicherverwaltung
Pfeil 14.6.1 Prozessinterne Freispeicherverwaltung
Pfeil 14.7 Dynamische Arrays
Pfeil 14.8 Speicher dynamisch reservieren mit »realloc()« und »calloc()«
Pfeil 14.9 Speicher vom Stack anfordern mit »alloca()« (nicht ANSI C)
Pfeil 14.10 »free()« – Speicher wieder freigeben
Pfeil 14.11 Zweidimensionale dynamische Arrays
Pfeil 14.12 Wenn die Speicherallokation fehlschlägt
Pfeil 14.12.1 Speicheranforderung reduzieren
Pfeil 14.12.2 Speicheranforderungen aufteilen
Pfeil 14.12.3 Einen Puffer konstanter Größe verwenden
Pfeil 14.12.4 Zwischenspeichern auf Festplatte vor der Allokation
Pfeil 14.12.5 Nur so viel Speicher anfordern wie nötig

Bisher legen Sie Daten wie Arrays in einem statischen Speichersegment im Programm ab. Wenn sich allerdings die Anzahl der Elemente zur Laufzeit verändert oder ein Speicher nicht dauerhaft benötigt wird, ist ein solcher statischer Speicher nicht geeignet. In diesem Kapitel erfahren Sie daher, wie Sie Speicherblöcke mit variabler Größe zur Laufzeit des Programms anfordern können.

14 Dynamische Speicherverwaltung

Bisher wurde die Speicherverwaltung in Variablendefinitionen versteckt. Sie mussten sich so zwar keine Gedanken über die Verwaltung machen, aber spätestens dann, wenn Sie neuen Speicher für weitere Daten benötigten, musste der Code umgeschrieben werden. Es kann auch Probleme mit der Gültigkeit einer Variablen geben. Eine Variable existiert nur in dem Anweisungsblock, in dem sie deklariert wurde. Die Gültigkeit des Speicherbereichs dieser Variablen verfällt, sobald dieser Anweisungsblock verlassen wird. Ausnahmen stellen globale und als static deklarierte Variablen dar.

Bei der dynamischen Speicherverwaltung gibt es diese Probleme nicht mehr. Zur dynamischen Speicherverwaltung wird ein Zeiger mithilfe der Funktion malloc() verwendet. Mit dieser Funktion geben Sie an, wie viel Speicherplatz reserviert werden soll. Der Zeiger verweist bei erfolgreicher Reservierung auf die Anfangsadresse des reservierten Speicherblocks. Die Aufgabe des Programmierers ist es, dafür zu sorgen, dass es immer einen Zeiger gibt, der auf diese Anfangsadresse verweist. Der so reservierte Speicher bleibt so lange erhalten, bis dieser entweder explizit mit der Funktion free() freigegeben wird oder bis das Programm sich beendet.

Sie müssen natürlich einen gewissen Aufwand betreiben, um die dynamische Speicherverwaltung zu realisieren. Wenn Sie dabei unvorsichtig zu Werke gehen, haben Sie schnell eine Zugriffsverletzung mit einem Zeiger verursacht. Ebenfalls zu Problemen kann es kommen, wenn Sie bei einem Programm immer wieder Speicher reservieren und dieser niemals mehr freigegeben wird. Man spricht dabei von Speicherlecks (engl. Memory Leaks). Wie diese und andere Probleme vermieden werden, erfahren Sie in den folgenden Abschnitten.


Galileo Computing - Zum Seitenanfang

14.1 Das Speicherkonzept topZur vorigen Überschrift

Bevor gezeigt wird, wie Speicher dynamisch reserviert werden kann, folgt ein Exkurs über das Speicherkonzept von laufenden Programmen. Ein Programm besteht aus den vier Speicherbereichen, die in Tabelle 14.1 aufgeführt sind.


Tabelle 14.1 Verschiedene Speicherbereiche in einem Programm

Speicherbereich Verwendung

Code

Maschinencode des Programms

Daten

statische und globale Variablen

Stack

Funktionsaufrufe und lokale Variablen

Heap

dynamisch reservierter Speicher


Code-Speicher

Der Code-Speicher wird in den Arbeitsspeicher geladen, und von dort aus werden die Maschinenbefehle der Reihe nach in den Prozessor (genauer gesagt in die Prozessor-Register) geschoben und ausgeführt.

Daten-Speicher

Im Daten-Speicher befinden sich alle statischen Daten, die bis zum Programmende verfügbar sind (globale und statische Variablen).

Stack-Speicher

Im Stack-Speicher werden die Funktionsaufrufe mit ihren lokalen Variablen verwaltet. In Abschnitt 9.20.1, »Exkurs: Stack«, bin ich schon näher auf den Stack eingegangen.

Heap-Speicher

Dem Heap-Speicher gebührt in diesem Kapitel das Hauptinteresse. Über ihn wird die dynamische Speicherreservierung mit Funktionen wie malloc() erst realisiert. Der Heap funktioniert ähnlich wie der Stack. Bei einer Speicheranforderung erhöht sich der Heap-Speicher, und bei einer Freigabe wird er wieder verringert. Wenn ein Speicher angefordert wurde, sieht das Betriebssystem nach, ob sich im Heap noch genügend zusammenhängender freier Speicher dieser Größe befindet. Bei Erfolg wird die Anfangsadresse des passenden Speicherblocks zurückgegeben.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z

 C von A bis Z
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Einstieg in C++






 Einstieg in C++


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


Zum Katalog: C/C++






 C/C++


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-
 Programmierung


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Coding for Fun







 Coding for Fun 


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de