Software Entwicklung 1

Ähnliche Dokumente
Speichermanagement Software Entwicklung 1

Vorlesung Programmieren

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Dynamische Speicherverwaltung

Software Entwicklung 1

Grundlagen der OO- Programmierung in C#

Dynamische Speicherverwaltung

Funktionen, Zeiger und Arrays in C Software Entwicklung 1

Dynamischer Speicher

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Algorithmen und Datenstrukturen

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Crashkurs C++ - Teil 1

Repetitorium Informatik (Java)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Grundlagen der Informatik 11. Zeiger

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

C/C++-Programmierung

Welche Informatik-Kenntnisse bringen Sie mit?

6 Speicherorganisation

Dynamische Speicherverwaltung

Tag 8 Repetitorium Informatik (Java)

Einführung in C. EDV1-04C-Einführung 1

Speicherverwaltung in C

EINFÜHRUNG IN DIE PROGRAMMIERUNG

U4-1 Aufgabe 3: einfache malloc-implementierung

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher

Vorkurs Informatik WiSe 16/17

Dynamisches Speichermanagement

Einstieg in die Informatik mit Java

Speicher und Adressraum

Programmieren in Java

C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Ein erstes Java-Programm

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

einlesen n > 0? Ausgabe Negative Zahl

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Datenstrukturen / Container in Java

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Einstieg in die Informatik mit Java

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Advanced Programming in C

Felder. M. Jakob. 28. April Gymnasium Pegnitz

Javakurs für Anfänger

Computeranwendung und Programmierung (CuP)

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Anweisungen zur Ablaufsteuerung

AuD-Tafelübung T-B5b

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Array-Verwaltung. Array-Verwaltung im Speicher Illustration. Zuweisung von Arrays. Speicherbereinigung. Aliasierung Eine Besonderheit

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Grundlagen der Informatik 0

Sprachkonstrukte Verzweigungen und Array-Strukturen

9 Zeiger (Pointer). Dynamischer Speicher

Probeklausur Informatik 2 Sommersemester 2013

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Test zu Grundlagen der Programmierung Leitung: Susanne Guth/Michael Hahsler. 31. Jänner 2003

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Grundlagen der Programmierung

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

Hydroinformatik I: Referenzen und Zeiger

Zentralübung Grundlagen der Programmierung

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Praxis der Programmierung

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Teil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Wie entwerfe ich ein Programm?

Methoden und Wrapperklassen

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Typische Speicherfehler in C

Grundlagen der Programmierung

Transkript:

Software Entwicklung 1 Annette Bieniusa Peter Zeller AG Softech FB Informatik TU Kaiserslautern

Speichermanagement Wie viel Speicher braucht ein Programm? Wofür wird Speicher benötigt? Wie ist der Speicher organisiert? Wie wird der Speicher verwaltet? Bieniusa Software Entwicklung 1 2/ 14

Speicherverwendung Wofür wird Speicher benötigt? Programmcode (unabhängig von Eingabedaten) Verwaltung von Prozedur-/Methodenaufrufen Werte, Objekte, Arrays, etc. Abhängig von Laufzeitumgebung! Bieniusa Software Entwicklung 1 3/ 14

Speicherbedarf: Primitive Datentypen In Java: Datentyp Bytes (1 Byte = 8 Bit) boolean 1 char 2 int 4 float 4 long 8 double 8 In C: maschinenabhängig! Bieniusa Software Entwicklung 1 4/ 14

Speicherbedarf: Referenzen Typischerweise abhängig von der konkreten Prozessorarchitektur In 32-Bit Architekturen: 4 Byte In 64-Bit Architekturen: 8 Byte Bieniusa Software Entwicklung 1 5/ 14

Speicherbedarf: Strukturen/Objekte und Arrays Bei Strukturen in C: abhängig von der Anzahl und Art der Komponenten Bei Objekten in Java: abhängig von der Anzahl und Art der Attribute + Overhead zur Objektverwaltung (Klasseninformation, GC,...) Array mit N Elemente, wobei M Byte zum Speichern eines Elements benötigt werden: mind. N M Byte zur Repräsentierung der Elemente (+ evtl. Overhead für Länge des Arrays, etc. in Java) Bieniusa Software Entwicklung 1 6/ 14

Wie ist der Speicher organisiert? Programmbereich: kompilierter Programmcode / Maschinenbefehle Globalen Datenbereich: alle Daten, die vom Beginn des Programms bis zum Programmende verfügbar sind (u.a. globale Variablen, String-Literale) Stack (dt. Laufzeitkeller): Prozedurinkarnationen mit ihren lokalen Variablen Heap (dt. Halde): dynamischen Speicherverwaltung Bieniusa Software Entwicklung 1 7/ 14

Speicherverwaltung Allokation (engl. allocation): Anfordern von Speicher Deallokation (engl. deallocation): Freigabe von Speicher Problem: Speicherleck (engl. memory leak) Programm benötigt mit der Zeit immer mehr Speicher Performance-Probleme oder auch Programmabbruch Nicht mehr verwendeter Speicher sollte daher immer freigegeben werden! Zwei Vorgehensweisen: Speicherbereinigung durch den Programmierer (Beispiel: C) Automatische Speicherbereinigung (Beispiel: Java) Bieniusa Software Entwicklung 1 8/ 14

Speicherbereinigung durch Programmierer (C) Speicherbereiche können auf Stack oder auf Heap reserviert werden Stack wird in C automatisch verwaltet Verwaltung des Heap durch malloc, calloc, realloc, free + sehr effizient und flexibel - fehleranfällig (mehrfaches Freigeben, fehlende Initialisierung,...) - schwierig zu debuggen Bieniusa Software Entwicklung 1 9/ 14

Automatische Speicherbereinigung Prozess ermittelt periodisch oder bei Bedarf, welcher Speicherbereich nicht mehr benötigt wird Automatische Deallokation (und evtl. Defragmentierung) + Vereinfacht die Programmierung + Kann effizient ausgeführt werden (z.b. in nebenläufigem Prozess) - Benötigt zusätzlichen Rechenaufwand Bieniusa Software Entwicklung 1 10/ 14

Erreichbarkeit Ein Objekt X heißt von einer Variablen v direkt erreichbar, wenn v eine Referenz auf X enthält. X heißt von v erreichbar, wenn es von v direkt erreichbar ist oder wenn es ein Objekt Y mit Attribut w gibt, so dass X von w direkt erreichbar ist und Y von v erreichbar ist. Ermittele erreichbare Objekte ausgehend von Wurzelvariablen in Objekt heißt erreichbar in einem Ausführungszustand A, wenn es von einer Wurzelvariablen zu A erreichbar ist. Nicht-erreichbare Objekte können freigegeben werden Bieniusa Software Entwicklung 1 11/ 14

Verhindern von Speicherlecks bei GC Aus der Implementierung der java.util.arraylist: public E remove ( int index ) { rangecheck ( index ); modcount ++; E oldvalue = elementdata ( index ); int nummoved = size - index - 1; if ( nummoved > 0) System. arraycopy ( elementdata, index +1, elementdata, index, nummoved ); elementdata [-- size ] = null ; // clear to let GC do its work } return oldvalue ; Bieniusa Software Entwicklung 1 12/ 14

Speicherlecks... I public static void main ( String [] args ) { int count = 1; while ( true ) { int [] ar = new int [ 1000000]; StdOut. println ( count ++) ; } } Kein Speicherleck! Bieniusa Software Entwicklung 1 13/ 14

Speicherlecks... II public static void main ( String [] args ) { List < int [] > la = new LinkedList < int [] >() ; int count = 0; while ( true ) { la.add ( new int [1000000]) ; count ++; StdOut. println ( count ); } } Terminiert mit OutOfMemoryError Bieniusa Software Entwicklung 1 14/ 14