Early first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement
|
|
- Linda Straub
- vor 7 Jahren
- Abrufe
Transkript
1 Early first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement Max Haslbeck Technische Universität München Zusammenfassung 1 Einleitung 2 Begriffsklärung Heutzutage erlauben fast alle modernen Programmiersprachen Bereiche des Speichers (Details der Hardwareimplementierung des Speichers sind im Rahmen dieser Arbeit uninteressant) dynamisch anzufordern, d.h. Speicherbereiche zu belegen deren Größe zur Kompilierzeit noch nicht bekannt ist und die auch länger existieren können als die Funktion (oder Subroutine, Methode, ) die sie erstellt hat. Diese Objekte werden auf dem Heap abgelegt, im Gegensatz zum Stack der jeweiligen Funktion. Dynamisch Speicher zu belegen ermöglicht Programmierern verschiedene Dinge wie Objekte verschiedener Größe zu erstellen oder rekursive Datenstrukturen wie Listen oder Bäume zu benutzen. Auf Objekte im Heap kann durch Referenzen, oder auch Pointer genannt, zugegriffen werden. Wie diese genau aussehen hängt von der jeweiligen Implementierung ab. Oft handelt es sich um nichts anderes als die Adressen der jeweiligen Speicherblöcke. 3 Manuelles Speichermanagement C/C++ sind praktisch die einzigen Programmiersprachen, die noch direktes manuelles Speichermanagement erlauben. Die Befehle malloc() und free () werden zum reservieren und zum freigeben von Speicherblöcken verwendet. malloc() nimmt als Argument die Größe des benötigten Speicherplatzes, versucht diesen 1
2 zu reservieren und gibt dann einen Pointer auf diesen Speicherplatz zurück. Falls dies nicht funktioniert, da z.b. der Heap voll ist, wird ein NULL-Pointer oder eine speziell reservierte Adresse zurückgegeben, je nach Implementierung [1]. Die einfachste Methode Speichermanagement zu betreiben ist natürlich gar kein Speichermanagement zu betreiben. Da das Betriebssystem den von einem Programm angeforderten Speicher nach dessen Beendigung komplett wieder freigibt, ist das durchaus eine Möglichkeit für Programme die nur kurz laufen. Dies kann auch funktionieren, wenn man sich der genauen Speicheranforderungen des Programms bewusst ist und diese definitiv den Heap nicht komplett aufbrauchen. 2 Dies ist natürlich keine Option für Programme mit hohen Speicheranforderungen oder mit hohen Laufzeiten wie z.b. UNIX-daemons ist. Hier liegt es in der Hand des Programmierers nicht mehr benötigten Speicher wieder freizugeben und Referenzen auf undefinierte Speicherbereiche zu vermeiden. Die Komplexität dieses Problems geht natürlich Hand in Hand mit der Komplexität eines Programms. Es gibt mittlerweile auch viele Tools die Programmieren helfen Fehler, wie die unten genannten, zu vermeiden, z.b. valgrind. 3.1 Memory leaks Memory leaks oder zu deutsch Speicherlecks sind einer der bekanntesten Fehler, die bei manueller Speicherverwaltung auftreten können. Hier ein Beispiel in C: #i n c l u d e <s t d l i b. c> void l e a k ( ) 4 { 6 i n t a = malloc ( s i z e o f ( i n t ) ) ; // S p e i c h e r p l a t z wird // r e s e r v i e r t 8 // Von a b e l e g t e r S p e i c h e r wird n i c h t f r e i g e g e b e n 10 } 12 i n t main ( ) { 14 l e a k ( ) 16 // dann z.b. w i e d e r h o l t e s Aufrufen von l e a k ( ) } Bei jedem Aufruf von leak() wird Speicherplatz reserviert, aber nicht mehr freigegeben. Außerhalb der Funktion leak() gibt es auch keine Möglichkeit mehr diesen 2
3 2 Speicherplatz zu referenzieren. Es kommt zum sogenannten memory leak. Wiederholtes Aufrufen von leak() (z.b. in einer Dauerschleife) führt zu zunehmenden Verschwendung von Speicherplatz auf dem Heap. Was dann normalerweise zur Beendigung des Programms durch das Betriebssystem führt, wenn kein Platz mehr auf dem Heap vorhanden ist. 3.2 Dangling pointers Bei dangling pointers handelt es sich um Referenzen auf Speicherbereiche, die nicht den erwarteteten Wert enthalten. Das kann passieren, wenn Speicherbereiche nicht installiert wurden oder freigegeben wurden und auf sie zugegriffen wird. Ein Beispiel in C: #i n c l u d e <s t d l i b. c> void dang ( i n t p o i n t e r ) 4 { 6 i n t a = p o i n t e r ; 8 f r e e a ; } 10 i n t main ( ) 12 { i n t p = malloc ( s i z e o f ( i n t ) ) ; 14 dang ( p ) ; 16 // Z u g r i f f auf den von p r e f e r e n z i e r t e n S p e i c h e r b e r e i c h // f u e h r t j e t z t zu u n d e f i n i e r t e m Verhalten 18 } 4 Automatisches Speichermanagement Um den Speicher automatisch zu verwalten gibt es mehrere Methoden und vieles hat sich getan seit John McCarthy in LISP zum ersten Mal einen garbage collector zur Speicherverwaltung benutzte [6]. Im Folgenden wird nur auf die grundlegenden Algorithmen eingegangen. Heute Speichermanagementsysteme beruhen auf diesen, wenn auch natürlich in optimierter Form. Man unterscheidet zwischen sogenannten Tracing-Algorithmen und reference counting. Tracing-Algorithmen bestimmen von Wurzelobjekten (engl. root set) ausgehend, welche Objekte im Speicher noch erreichbar sind. Alle Objekte auf die das nicht zutrifft können verworfen werden, da sie definitiv nicht mehr gebraucht werden (sie sind ja nicht mehr referenzierbar). Die Wurzelobjekte können z.b. in einer Liste gespeichert sein oder durch Scannen des Stacks bestimmt werden. 3
4 Im Folgenden wird zuerst aber reference counting beschrieben. 4.1 reference counting Wahrscheinlich die offensichtlichste Methode automatisches Speichermanagement zu betreiben ist alle Pointer/Referenzen zu zählen, die auf den jeweiligen Speicherbereich zeigen. In Worten: Für jedes Objekt im Speicher halte die Anzahl der Pointer, die auf dieses Objekt zeigen, irgendwo fest. Wird ein Pointer einem anderen Pointer zugewiesen wie hier in C i n t p, q ; ; p = q ;, dann erhöhe den Zähler des Speicherobjekts auf das q zeigt und erniedrige den Zähler des Speicherobjekts auf das p zeigt. Ist ein Zähler null kann der jeweilige Speicherbereich freigegeben werden. Werden vorher noch alle Pointer in diesem Speicherbereich abgearbeitet und deren Zähler dekrementiert, spricht man von rekursivem reference counting. Diese Methode wurde zum ersten Mal von George E. Collins in 1960 beschrieben [3]. Reference counting hat einige Vorteile aufgrund seiner Einfachheit. Nicht mehr gebrauchte Speicherbereiche werden sofort wieder freigegeben, es wird nur auf die wirklich benötigten Pointer zugegriffen und der nötige Rechenaufwand verteilt sich über die gesamte Ablaufzeit eines Programms. Simples reference counting kann jedoch nicht mit zyklischen Datenstrukturen umgehen, d.h. Objekte die sich selbst referenzieren. Jedoch kann der Algorithmus erweitert werden um mit diesen umzugehen. Des weiteren kann des Erhöhen und Erniedrigen des Zählers signifikanten Overhead erzeugen, was jedoch wieder durch Optimierungen vermieden werden kann. Reference counting wird in C++ bei sogenannten smart pointers zur automatischen Speicherverwaltung verwendet [2]. 4.2 mark-sweep Bei mark-sweep handelt es sich um einen sogenannten tracing-algorithmus. Ausgehend von Wurzelobjekten (Pointer in Registern, Stacks, globalen Variablen) markiert es die Speicherbereiche die erreihbar sind. Diese Speicherbereiche werden wieder nach Pointern zu Speicherbereiche durchsucht und dann diese markiert, usw. In der zweiten Phase (sweep) werden dann alle 4
5 5 Schluss Literatur [1] malloc(3) - Linux man page. malloc.3.html. [Online; accessed 10-December-2014]. [2] The GNU C++ Library [Online; accessed 17-December-2014]. [3] George E. Collins. A method for overlapping and erasure of lists. Communications of the ACM, 3(12): , December [4] Richard Jones, Antony Hosking, and Eliot Moss. The Garbage Collection Handbook: The Art of Automatic Memory Management. CRC Applied Algorithms and Data Structures. Chapman & Hall, January [5] Richard E. Jones. Garbage Collection: Algorithms for Automatic Dynamic Memory Management. Wiley, Chichester, July With a chapter on Distributed Garbage Collection by R. Lins. [6] John McCarthy et al. Lisp 1.5 Programmer s Manual,
Vorlesung Programmieren
Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von
MehrDynamische Speicherverwaltung
Dynamische Speicherverwaltung 1/ 23 Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Dynamische Speicherverwaltung 2/ 23 Gliederung 1 Allgemeines zur Speichernutzung 2 Ziele und Nutzen 3 Anwendung in
MehrSpeicherverwaltung in C
Speicherverwaltung in C Tobias Gutzmann, Le Xuan Khanh, Robert Hartmann 19.04.2005 Typeset by FoilTEX Inhalt Übersicht der wichtigsten Befehle malloc, free, realloc alloca, obstack, brk Speicherverwaltung
MehrUniversität Hamburg. Seminar: Effiziente Programmierung in C. Referenzzählung. Autoren: Kevin Köster. Betreuer: Michael Kuhn
Universität Hamburg Seminar: Effiziente Programmierung in C Referenzzählung Autoren: Kevin Köster Betreuer: Michael Kuhn 31. März 2013 Inhaltsverzeichnis 1 Einleitung 3 1.1 Das Problem.................................
MehrSoftware Entwicklung 1
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
MehrSpeichermanagement Software Entwicklung 1
Speichermanagement Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Speicher ist eine wichtige Ressource für Softwaresysteme. Viele nicht-funktionale Eigenschaften hängen vom angemessenen
MehrInformatik II SS Inhalt. Objektlebensdauer (2/3) Objektlebensdauer (1/3)
Inhalt Informatik II SS 2004 Teil 6: Sprachen, Compiler und Theorie 5 Lebensdauer von Objekten Speichermanagement Weiterführende Spracheigenschaften und Bindungen Implementierung von statischen Gültigkeitsbereichen
MehrSpeichermanagement Software Entwicklung 1
Speichermanagement Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Speicher ist eine wichtige Ressource für Softwaresysteme. Viele nicht-funktionale Eigenschaften hängen vom angemessenen
MehrDynamisches Speichermanagement
Dynamisches Speichermanagement Proseminar C-Programmierung - Grundlagen und Konzepte Timo Minartz timo.minartz@informatik.uni-hamburg.de Wissenschaftliches Rechnen Fachbereich Informatik Universität Hamburg
MehrProgrammieren in Java
Ein Projekt 2 Wiederholung: new-operator Werte nicht-primitiver Datentypen müssen mit new erzeugt werden Es gibt keine Möglichkeit primitive Daten mit new zu erzeugen Beispiele int[] myarray = new int[]
MehrInformatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1
Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss
MehrProgrammiertechnik II
Automatische Speicherverwaltung Speichermüll Objekte verweisen über Referenzen auf andere Objekte Objekte bilden Graph Explizites Freigeben von Objekten C: free() C++: delete Problem:
MehrAgenda. Informatik I WS05/06 Folien von Tobias Dezulian
15.12.2005 Agenda Geltungsbereich (Scope) von Variablen Blöcke Der Call-Stack Einschub: Debugging unter Eclipse Der Heap Lebensdauer von Objekten Müllabfuhr: Garbage Collection Exceptions Geltungsbereich
MehrEinführung in die Programmierung
Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität
MehrProgrammieren I. Kapitel 12. Referenzen
Programmieren I Kapitel 12. Referenzen Kapitel 12: Referenzen Ziel: Die Wahrheit über Objekte Lebensdauer Speicherverwaltung Parameterübergabemechanismen in Methoden Gleichheiten, Kopien Arrays Speicherbereinigung
MehrÜbersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C
Übersicht Speichertypen Speicherverwaltung und -nutzung Speichertypen Beim Laden eines Programms in den Speicher (Programmausführung) kommen 3 verschiedene Speicherbereiche zum Einsatz: Text Segment (Code
Mehr6 Speicherorganisation
6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrDynamische Speicherverwaltung
Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Inhaltsverzeichnis 1 Allgemeines zur Speichernutzung 2 2 Ziel und Nutzen 2 3 Anwendung in C 2 3.1 malloc............................... 3 3.2 calloc...............................
MehrEinführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher
Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher Arvid Terzibaschian 1 Zusammengesetzte Datentypen 2 Wozu zusammengesetzte Datentypen? Anforderung: Sie sollen ein Kundenverzeichnis
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrCrashkurs C++ - Teil 1
Crashkurs C++ - Teil 1 Intro Speicherverwaltung Variablen, Pointer, Referenzen Felder statische & dynamische Allozierung Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik
Mehr6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine
MehrC++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue
C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen Leibniz Universität IT Services Anja Aue Zeiger (Pointer) Verweis auf eine Speicherstelle. Speicherung einer Speicheradresse.
MehrPraxisorientierte Einführung in C++ Lektion: "Dynamische Speicherverwaltung"
Praxisorientierte Einführung in C++ Lektion: "Dynamische Speicherverwaltung" Christof Elbrechter Neuroinformatics Group, CITEC May 15, 2014 Christof Elbrechter Praxisorientierte Einführung in C++ May 15,
MehrZeiger und dynamischer Speicher
Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Zuletzt aktualisiert: 09.12.2013, 07:49 Uhr
MehrConcurrent Garbage Collector
Concurrent Garbage Collector Sprachen für Parallelprogrammierung: Seminar 6 Emre Kasif Selengin IPD Snelting, Lehrstuhl Programmierparadigmen KIT Universität des Landes Baden-Württemberg und nationales
MehrValgrind. Speicherleaks und Bugs finden. Frederik Heber. Seminarreihe Technische Numerik. Institut für Numerische Simulation, Universität Bonn
Speicherleaks und Bugs finden Institut für Numerische Simulation, Universität Bonn findet Seminarreihe Technische Numerik findet findet C/C++ bieten keinen Garbage Collector. Vorteile Mehr Freiheiten.
MehrLokale Strategien zur Garbage Collection Problemstellung der verteilten Gargabe Collection Algorithmen
Garbage Collection Überblick Literatur Lokale Strategien zur Garbage Collection Problemstellung der verteilten Gargabe Collection Algorithmen S. Blackburn et al: Starting with Termination: A Methodology
MehrProgrammierkurs. Steffen Müthing. January 18, Interdisciplinary Center for Scientific Computing, Heidelberg University
Programmierkurs Steffen Müthing Interdisciplinary Center for Scientific Computing, Heidelberg University January 18, 2019 Konzepte Standard-Konzepte für Code Reuse: Polymorphie/Vererbung Funktionalität
MehrWas ist Reference Counting Implementierung. Ende. Reference Counting. Kevin Köster. Uni Hamburg. 31. März Kevin Köster Reference Counting 1/58
Reference Counting Kevin Köster Uni Hamburg 31. März 2013 Kevin Köster Reference Counting 1/58 Kevin Köster Reference Counting 2/58 Beschreibung Dateisystem Praxis Frage Wann wissen wir, ob ein Objekt
MehrInformatik - Übungsstunde
Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 12-23.05.2018 Lernziele Klassen Dynamic Memory Jonas Lauener (ETH Zürich) Informatik - Übung Woche 12 2 / 20 Structs
MehrC++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18
C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen
MehrDer Gnu-C++-Compiler allerdings lässt den oben beschriebenen Code durchgehen. Das ist allerdings nicht Standardkonform und sollte deswegen vermieden
1 Der Gnu-C++-Compiler allerdings lässt den oben beschriebenen Code durchgehen. Das ist allerdings nicht Standardkonform und sollte deswegen vermieden werden. 2 Der Speicher wird auf einem besonderen Speicherbereich,
MehrDynamischer Speicher
Dynamischer Speicher C-Kurs 2012, 3. Vorlesung Tino Kutschbach tino.kutschbach@campus.tu-berlin.de http://wiki.freitagsrunde.org 13. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike
Mehr9 Zeiger (Pointer). Dynamischer Speicher
9 Zeiger (Pointer). Dynamischer Speicher Jörn Loviscach Versionsstand: 25. September 2013, 18:07 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
Mehr6. Verkettete Strukturen: Listen
6. Verkettete Strukturen: Listen 5 K. Bothe, Inst. f ür Inf., HU Berlin, PI, WS 004/05, III.6 Verkettete Strukturen: Listen 53 Verkettete Listen : Aufgabe Vergleich: Arrays - verkettete Listen Listenarten
MehrProgrammieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff
Programmieren in C Rekursive Strukturen Prof. Dr. Nikolaus Wulff Rekursive Strukturen Häufig müssen effizient Mengen von Daten oder Objekten im Speicher verwaltet werden. Meist werden für diese Mengen
MehrGarbage Collection. Maik Theisen Betreuer: Guido Tack
Garbage Collection Maik Theisen Betreuer: Guido Tack Proseminar Programmiersysteme WS 03/04 Prof. Dr. Gert Smolka Programming Systems Lab, Universität des Saarlandes Garbage Collection (GC) hat sich mittlerweile
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
MehrBetriebssysteme. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.
Betriebssysteme Tafelübung 4. Speicherverwaltung http://ess.cs.tu-dortmund.de/de/teaching/ss217/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware
MehrBetriebssysteme. Agenda. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.
Betriebssysteme Tafelübung 4. Speicherverwaltung http://ess.cs.tu-dortmund.de/de/teaching/ss217/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware
MehrGrundlagen der Informatik 11. Zeiger
11. Zeiger Motivation Zeiger und Adressen Zeiger und Funktionen Zeiger und Arrays Dynamische Objekte Grundlagen der Informatik (Alex Rempel) 1 Motivation Dynamische Speicherverwaltung Oft müssen große
MehrDynamische Speicherverwaltung
Dynamische Speicherverwaltung INE2 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? Bisjetzt Beispiel Ranglistenprogramm für Sportveranstaltungen Besser - genaue Anzahl Teilnehmer
Mehr1 pulsierender Speicher
1 pulsierender Speicher 1.1 Aufgabentyp Gegeben sei das folgende C-Programm: [...] (a) Geben Sie den Gültigkeitsbereich jedes Objektes des Programms an. (b) Stellen Sie die Rechnung des Programms für die
Mehr7. Organisation von Informationen
Computeranwendung in der Chemie Informatik für Chemiker(innen) 7. Organisation von Informationen Jens Döbler 2003 "Computer in der Chemie", WS 2003-04, Humboldt-Universität VL7 Folie 1 Grundlagen Programme
MehrDebugging und Speicherfehler. Seminar Effiziente Programmierung Kadir Duman
Debugging und Speicherfehler Seminar Effiziente Programmierung Kadir Duman 01.12.2016 Inhalt Debugging Allgemein Was ist ein Bug? Was ist Debugging? Speicherfehler Allgemein Unterschiedliche Typen von
MehrProgrammierung für mobile Endgeräte
Programmierung für mobile Endgeräte Objective-C (Speichermanagement) 2 Objective-C: Speichermanagement (Beispiel) Programmstrack Heap -(void) simpleexamples: (int) counter withpointer: (id) ptr { int temp
MehrDynamische Speicherverwaltung
Dynamische Speicherverwaltung Code Stack Heap Static Sie wissen, wie der Speicher in Programmen verwendet wird Sie wissen, was ein Heap (eine Halde) ist Sie kennen die Aufgaben des Speicherverwalters Sie
MehrEindimensionale Arrays und Heap
Eindimensionale Arrays und Heap Prof. Dr.-Ing. Thomas Schwotzer 1 Einführung Wir haben bisher mit einfachen Datentypen gearbeitet, d.h. Datentypen, die in einer Speicherzelle abgelegt werden können. Praktisch
MehrProgrammierwerkstatt. Arrays, Pointer und Referenzen
Programmierwerkstatt Arrays, Pointer und Referenzen Zum Inhalt Wir wollen Euch: das Wesentliche vermitteln Fehlerquellen verdeutlichen Verständnis ist uns wichtig programming by coincidence vermeiden Themen
MehrÜbungspaket 29 Dynamische Speicherverwaltung: malloc() und free()
Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten
MehrC++ Teil 6. Sven Groß. 23. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 15
C++ Teil 6 Sven Groß 23. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 23. Nov 2015 1 / 15 Themen der letzten Vorlesung const-deklaration Referenzen Zeiger Felder Sven Groß (IGPM, RWTH Aachen) C++
MehrBerühmte Informatiker
Berühmte Informatiker Teil 12: Alonzo Church 1903-1995 John McCarthy 1927 - * 14.06.1903 in Washington 11.08.1995 in Hudson Alonzo Church 1924 Bachelor an der Princeton University 1927 Doktorarbeit an
MehrObjektorientierte Programmierung II
Objektorientierte Programmierung II OOP I Erlaubt Entwicklers, im Problemraum zu denken und zu arbeiten. Das Problem wird in eine Menge von Objekten zerlegt. Objekte wirken aufeinander, um das Problem
MehrGrundlagen der Programmiersprache C für Studierende der Naturwissenschaften
Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Teil 7: Matrizen, Vektoren und dynamische Speicherverwaltung Martin Nolte Abteilung für Angewandte Mathematik Universität Freiburg
MehrEinstieg in die Informatik mit Java
1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition
MehrProgrammierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
Mehr7 Laufzeit-Speicherverwaltung
7.1 Grundlagen Bevor wir die Code-Generierung betrachten, müssen wir uns Gedanken über zur Laufzeit des zu generierenden Programms notwendige Aktivitäten zur Zuordnung und Freigabe von Speicherplatz machen.
MehrÜbungen zu Systemprogrammierung 1
Übungen zu Systemprogrammierung 1 Ü1-2 Speicherverwaltung Sommersemester 2018 Christian Eichler, Jürgen Kleinöder Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl
MehrÜbungen zu Systemprogrammierung 1 (SP1)
Übungen zu Systemprogrammierung 1 (SP1) Ü1-2 Speicherverwaltung Andreas Ziegler, Stefan Reif, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität
MehrAutomatisches Speichermanagement
Automatisches Speichermanagement Compilerbau Automatisches Speichermanagement 284 Automatisches Speichermanagement Viele moderne Programmiersprachen verfügen über automatisches Speichermanagement. Durch
MehrGarbage Collection. Alexander van Renen
Garbage ollection Alexander van Renen Fakultät für Informatik Technische Universität München Boltzmannstr. 3 85748 Garching, Deutschland renen@in.tum.de Abstract: Die meisten modernen Programmiersprachen,
MehrEine einfache Speicherverwaltung 211
Eine einfache Speicherverwaltung 211 Im folgenden wird eine sehr einfache Speicherverwaltung vorgestellt, die das Belegen und Freigeben von Speicher unterstützt, freigegebene Speicherflächen wieder zur
MehrFreispeicherverwaltung
Freispeicherverwaltung Allgemeine Techniken und Anwendung unter Linux Martin Wahl, 17.11.03 Freispeicherverwaltung 1 Überblick Allgemeines Suchstrategien Verwaltungsstrategien externer / interner Verschnitt
MehrInformatik II Übung 05. Benjamin Hepp 3 April 2017
Informatik II Übung 05 Benjamin Hepp benjamin.hepp@inf.ethz.ch 3 April 2017 Java package Hierarchie import.. nur noetig um Klassen aus anderen Packeten zu importieren Es kann auch immer der vollstaendige
MehrSpeicherverwaltung. Objektorientierte Programmierung. (Winter 2006/2007) Lebensdauer von Objekten. new, delete. Beispiel: Verkettete Listen
11. Dynamische Speicherverwaltung 11-1 Objektorientierte Programmierung (Winter 2006/2007) Kapitel 11: Dynamische Speicherverwaltung Lebensdauer von Objekten new, delete Beispiel: Verkettete Listen 11.
MehrÜbungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 E-Uebung3.fm
E 3. Übung E 3. Übung Besprechung 1. Aufgabe Aufgabe 3: malloc Debugger gdb E.1 1. Include, Deklarationen #include #include void append_element(int value); int remove_element(void);
MehrSchwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen
Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen
Mehr7. Verkettete Strukturen: Listen
7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Version: 4. Jan. 2016 Vergleich: Schwerpunkte Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++):
MehrBetriebssysteme. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.
Betriebssysteme Tafelübung 4. Speicherverwaltung https://ess.cs.tu-dortmund.de/de/teaching/ss2018/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de https://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware
MehrC++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14
C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung
MehrLiteratur. [4-1] Denert, Ernst; Franck, Reinhold: Datenstrukturen. BI Wissenschaftsverlag, 1977
Literatur [4-1] Denert, Ernst; Franck, Reinhold: Datenstrukturen. BI Wissenschaftsverlag, 1977 [4-2] http://www.mikrocontroller.net/articles/heap-fragmentierung 2 Links [4-A] http://de.wikipedia.org/wiki/speicherleck
MehrZeiger in C und C++ Zeiger in Java und C/C++
1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,
MehrFreispeicherverwaltung Martin Wahl,
Freispeicherverwaltung Martin Wahl, 17.11.03 Allgemeines zur Speicherverwaltung Der physikalische Speicher wird in zwei Teile unterteilt: -Teil für den Kernel -Dynamischer Speicher Die Verwaltung des dynamischen
MehrC++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13
C++ Teil 7 Sven Groß 30. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 30. Nov 2015 1 / 13 Themen der letzten Vorlesung Zeiger, Felder (Wdh.) dynamische Speicherverwaltung Sven Groß (IGPM, RWTH Aachen)
MehrProgrammieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff
Programmieren in C Speicher anfordern, Unions und Bitfelder Prof. Dr. Nikolaus Wulff Vergleich: Felder und Strukturen Felder müssen Elemente vom selben Typ enthalten. Strukturen können Elemente unterschiedlichen
MehrTeil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden
Teil 8: Dynamische Speicherverwaltung Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Inhaltsverzeichnis 8 Dynamische Speicherverwaltung... 3 8.1
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)
MehrINE1 Speicherverwaltung und zweidimensionale Arrays. Speicherorganisation Dynamischer Speicher in C Zweidimensionale Arrays
INE1 Speicherverwaltung und zweidimensionale Arrays Speicherorganisation Dynamischer Speicher in C Zweidimensionale Arrays 1 Speicherorganisation in C 2 von 48 Speicherorganisation Anlegen eines Arrays:
MehrInhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)
Inhalt Inhalt: 4. Programmiersprache C 4.1 Programmaufbau in C 4.2 Basisdatentypen und einfache Anweisungen 4.3 Steuerfluss-Konstrukte 4.4 Arbeit mit indizierten Größen (Felder) 4.5 Arbeit mit Zeigern
MehrJava Garbage Collection
Java Garbage Collection Kurzfassung In diesem Seminarbericht möchte ich zuerst auf die Frage eingehen, was Garbage Collection ist und welche Vor- und Nachteile es in Bezug auf eine konventionelle Heapverwaltung
MehrSpeicherverwaltung (Swapping und Paging)
Speicherverwaltung (Swapping und Paging) Rückblick: Segmentierung Feste Einteilung des Speichers in einzelne Segmente 750k 0 Rückblick: Segmentierung Feste Einteilung des Speichers in einzelne Segmente
Mehr2.8 Klassen. Nichtgleichartige Elemente können in Klassen zu einem neuen Typ zusammengefasst werden. Beispiel: Die drei Komponenten
2.8 Klassen Frage: Arrays fassen gleichartige Elemente (d.h. Elemente von gleichem Typ) zusammen. Wie kann man nichtgleichartige Elemente zu einem neuen Typ zusammenfassen? Nichtgleichartige Elemente können
MehrMaschinencode Dateiformat und Stackframes
Maschinencode Dateiformat und Stackframes Proseminar C-Programmierung - Grundlagen und Konzepte Julian M. Kunkel julian.martin.kunkel@informatik.uni-hamburg.de Wissenschaftliches Rechnen Fachbereich Informatik
MehrObjektorientierte Programmierung und Klassen
Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 16.5.07 G. Bohlender (IANM UNI Karlsruhe) OOP
MehrALP II Dynamische Datenmengen Datenabstraktion (Teil 2)
ALP II Dynamische Datenmengen Datenabstraktion (Teil 2) O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 49 Einfach verkettete Listen O1 O2 O3 50 Einführung Einfach verkettete Listen sind die einfachsten
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Tafelübung 04 Referenzen, Overloading, Klassen(hierarchien) Clemens Lang T2 18. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/13 Organisatorisches Nächster Übungstermin
MehrDieÜbersetzung funktionaler Programmiersprachen
DieÜbersetzung funktionaler Programmiersprachen 107 11 Die Sprache PuF Wir betrachten hier nur die Mini-Sprache PuF( Pure Functions ). Insbesondere verzichten wir(vorerst) auf: Seiteneffekte; Datenstrukturen;
MehrAdvanced Programming in C
Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer
MehrJava Garbage Collector: Funktionsweise und Optimierung. Mathias Dolag Prof. Dr. Peter Mandl (DOAG 2012, )
Java Garbage Collector: Funktionsweise und Optimierung Mathias Dolag Prof. Dr. Peter Mandl (DOAG 2012, 20.11.2012) 1 Agenda Algorithmen Tuning Performance-Messungen Zusammenfassung 2 Mathias Dolag / Prof.
MehrINE1 Arrays, Zeiger, Datenstrukturen
INE1 Arrays, Zeiger, Datenstrukturen Arrays Felder von Elementen gleichen Typs Verwenden von Adressen: Zeiger Datenstrukturen mit struct Zeiger auf Datenstrukturen Spezielle Zeiger und komplexe Deklarationen
MehrTafelübung zu BS 4. Speicherverwaltung
Tafelübung zu BS 4. Speicherverwaltung Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2014/bs/
MehrComputergestütztes wissenschaftliches Rechnen SoSe 2004
Computergestütztes wissenschaftliches Rechnen SoSe 00 Alexander K. Hartmann, Universität Göttingen. Mai 00. Dynamisches Programmieren Fibonacci Zahlen: (n = ) fib(n) = (n = ) fib(n ) + fib(n ) (n > ) Z.B.
MehrSeminar Effiziente Programmierung Debugging und Speicherfehler
Seminar Effiziente Programmierung Debugging und Speicherfehler Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg
MehrVariablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes
Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!
Mehr