Dynamische Speicherverwaltung
|
|
|
- Jonas Kästner
- vor 9 Jahren
- Abrufe
Transkript
1 Dynamische Speicherverwaltung Tim Dobert Inhaltsverzeichnis 1 Allgemeines zur Speichernutzung 2 2 Ziel und Nutzen 2 3 Anwendung in C malloc calloc realloc free Beispielprogramm Funktionsweise Vergleich mit anderen Sprachen Java C Praktische Tipps 5 7 Quellen und Anhang Quellen Code des Beispielprogramms
2 1 Allgemeines zur Speichernutzung In modernen Systemen sind oft verschiedene Arten von Speicher verbaut. Generell gilt dabei, die schnellen Speicherbausteine bieten wenig Platz, die langsameren viel. Beim Schreiben von einfachen Programmen muss man sich darum allerdings keine Gedanken machen welche Daten in welchen Speicher kommen. Das übernimmt meistens das Betriebssystem. Dieses stellt einen kontinuierlichen, virtuellen Adressraum zur Verfügung, der meist mehrere Speicherarten in der Hardware überspannt. Jedes Programm, was gestartet wird, bekommt einen Teil dieses Adressraums zugeteilt und kann diesen frei nutzen. Der Speicherplatz, den ein Programm nutzen kann, enthält drei wichtige Teile: Konstanten-Pool, Stack und Heap. Der Konstanten Pool enthält vor allem Daten, die mit const (in C) gekennzeichnet werden. Dieser Teil ist statisch, da Größe und Inhalt dieser Daten zur Übersetzungszeit feststehen. Auf dem Stack werden unter Anderem lokale Variablen und Parameter gespeichert. Er ist der wichtigste Teil für Berechnungen und Funktionsaufrufe. In der Assemblerprogrammierung kommt man nicht daran vorbei, ihn intensiv zu nutzen. Der dritte Teil, der Heap, ist ein frei nutzbarer, ungeordneter Speicherraum. Wenn über dynamische Speicherverwaltung gesprochen wird, ist damit in der Regel die Benutzung des Heaps gemeint. In der Praxis bedeutet das, Speicher wird reserviert, beschrieben bzw. gelesen und wieder freigegeben, wenn er nicht mehr benutzt wird. 2 Ziel und Nutzen Generell ist es immer dann sinnvoll, Speicher dynamisch zu nutzen, wenn zur Übersetzungszeit noch nicht feststeht, wie viel Speicherplatz an einer Stelle gebraucht wird. Ist zum Beispiel nicht absehbar, wie groß ein Array sein muss, würde es unnötig Speicherplatz verschwenden, provisorisch ein viel zu großes Array anzulegen. Das dynamische Erzeugen von Arrays auf dem Heap löst dieses Problem und ist in den meisten Fällen sehr einfach. Ein weiteres Anwendungsgebiet sind Structs. Durch die dynamische Verwendung von Structs kann in vielen Bereichen der Funktionalität von objektorientierten Sprachen nahekommen. 3 Anwendung in C Generell wird der Heap in C so genutzt: Mithilfe eines Befehls wird nach Speicher von einer bestimmten Größe gefragt. Das System alloziert dann einen Speicherblock dieser Größe und gibt seine Adresse zurück. Über diese Adresse kann der Speicher dann beschrieben und ausgelesen werden. 2
3 Im nächsten Abschnitt werden die vier Grundbefehle aus der Standardbibliothek (stdlib) vorgestellt. 3.1 malloc Der einfachste Befehl um Speicher zu allozieren ist malloc. void* malloc(int) Die Methode nimmt eine Anzahl Bytes als Parameter, alloziert Speicher dieser Größe und gibt die Adresse dann als Zeiger zurück. Der Rückgabewert sollte gut aufgehoben werden, da er der einzige Zugang zu dem Speicher ist. Hier ist eine beispielhafte Verwendung: int * number = ( int *) malloc ( sizeof ( int )); * number = 3; //Es wurde eine 3 abgespeichert Die Typumwandlung des Rückgabewertes ist nicht explizit notwendig, sie findet auch implizit statt (in C++ ist sie aber notwendig). Die Angabe der Größe sollte in der Regel immer mithilfe von sizeof geschehen. Das ist praktischer, als sich die Größe selbst auszurechnen, vor allem bei Structs und macht es außerdem einfacher, den Code auf andere Systeme zu portieren. 3.2 calloc malloc reserviert lediglich Speicher, ändert aber seinen Inhalt nicht. Wird gleich nach dem Aufruf nachgesehen was drinsteht, erhält man mehr oder weniger zufällige Werte. Falls koplett leerer Speicher benötigt wird, ist es am praktischsten, die Methode calloc zu benutzen. void* calloc(int, int) Diese Methode funktioniert ähnlich wie malloc. Der reservierte Speicher wird hier aber gleich mit Null initialisiert. Die Parameter sind auch etwas anders: der Erste besagt wie viele Blöcke reserviert werden sollen, der Zweite wie groß jeder Block sein soll (ebenfalls in Byte). Nützlich ist calloc zum Beispiel bei Char-Arrays, da diese dann gleich Null-terminiert sind. 3.3 realloc Ein reservierter Speicherblock kann nicht ohne weiteres vergrößert werden, da der Speicher um ihn herum möglicherweise für etwas anderes reserviert ist. Wird erst bei der Ausführung des Programms klar, das bereits allozierter Speicher nicht ausreicht, kann die Methode realloc benutzt werden. void* realloc(void*, int) 3
4 realloc nimmt einen Zeiger auf bereits reservierten Speicher als Parameter, sowie eine Größe in Bytes. Dann wird der Speicher vergrößert oder neu alloziert, sodass der zurückgegebene Zeiger anschließend auf Speicher mit der neuen Größe zeigt. Daten, die zuvor im Speicher standen gehen nicht verloren. Diese Methode zu benutzen ist um einiges einfacher, als neuen Speicher mit malloc zu reservieren un den Inhalt zu kopieren. 3.4 free Zusammen mit malloc ist free mit der wichtigste Befehl. Speicher, der reserviert wurde bleibt reserviert, bis er explizit freigegeben wird. Die Freigaben erfolgt mit dieser Methode. void free(*void) free gibt den Speicherplatz, auf den der übergebene Zeiger zeigt, wieder frei. Jede Art von Speicherallokation sollte irgendwann von einem free gefolgt werden. 4 Beispielprogramm Im Anhang (Teil 7) befindet sich der Quellcode zu einem Beispielprogramm. Es implementiert ein dynamisches Array, das automatisch größer wird, wenn es voll ist. Es dient nur der Demonstration und implementiert keine vollständige Liste. 4.1 Funktionsweise Das Array ist eine Struktur, bestehend aus einem Zeiger auf den Speicher, der momentanen Größe des reservierten Speichers und dem Index der nächsten freien Zelle. Dieses Array wird initialisiert (intitarray()), indem eine Startgröße festgelegt, Speicher dieser Größe reserviert und der Index auf null gesetzt wird. Das Einfügen eines neuen Elements (add(int element)) geschieht wie gewohnt, solange noch Platz ist. Ist kein Platz mehr, wird zunächst mit realloc der Speicherplatz auf das Doppelte vergrößert. Vor Beenden des Programms, wird der Speicherplatz wieder freigegeben und der Zeiger des Arrays vorsichtshalber auf NULL gesetzt. 5 Vergleich mit anderen Sprachen 5.1 Java Der Vergleich zu Java ist aus mehreren Gründen interessant. Java bietet keine Befehle, mit denen sich direkt Speicher einer bestimmten Größe reservieren oder freigeben lässt. Beim erzeugen eines Objekts (mithilfe des 4
5 new-operators) wird automatisch Speicherplatz reserviert und von dem Objekt belegt. Der andere große Unterschied zu C liegt bei der Freigabe des Speichers. In C bleibt Speicher so lange reserviert, bis er manuell wieder freigegeben wird. geschieht das nicht, kann es irgendwann dazu kommen, dass es keinen freuen Speicher mehr gibt und das Programm abstürzt. Java hingegen benutzt einen Garbage Collector. Dieser sorgt während der Laufzeit automatisch dafür, dass Speicher, auf den den mehr zugegriffen wird, freigegeben wird. Das macht das Programmieren teilweise angenehmer, gibt einem aber auch weniger direkte Kontrolle. 5.2 C++ C++ stellt eine Obermenge zu C dar und bietet deswegen auch alle vorgestellten Befehle an. In der Praxis werden sie allerdings kaum benutzt. Stattdessen benutzt man auch hier überwiegend den new-operator, der die Allokation automatisch übernimmt. Freigegeben wird der Speicher dann mit der Methode delete(void*), die in dem Referenzierten Objekt eine Destruktormethode aufruft, es anschließend löscht und dem von ihm besetzten Speicher freigibt. 6 Praktische Tipps Bei dynamischer Speichernutzung ist immer ein wenig Vorsicht geboten. Fehlerhafte Handhabung von Speicher kann unvorhersehbares Verhalten auslösen. Deshalb sollte man einige Dinge immer im Kopf behalten: 1. Reservierter Speicher sollte am Ende des Sichtbarkeitsbereiches des Pointers freigegeben werden. Der Pointer ist der einzige Weg, auf den Speicher zuzugreifen. Wenn er verloren geht, z.b. weil der Sichtbarkeitsbereich verlassen wird, bleiben nutzlose Daten im Speicher liegen. 2. Der Pointer sollte nach free auf NULL gesetzt werden. Der Versuch, auf bereits Freigegebenen Speicher zuzugreifen, kann zu bösen Fehlern führen. Damit es gar nicht dazu kommen kann, sollte nach dem Freigeben des Speichers der dazugehörige Zeiger eine NULL- Referenz erhalten. Eine weitere Möglichkeit Zugriffsfehler vor allem bei Arrays zu vermeiden ist, beim reservieren des Speichers die Größe irgendwo zu sichern. Falls diese Größe überschritten werden soll, kann mit realloc sonst einfach erst mal der Platz vergrößert werden. 5
6 7 Quellen und Anhang 7.1 Quellen Literatur [1] Rechnerstrukturen Skript Kapitel 17, [2] C dynamic memory allocation, [3] Advanced Memory Management: Dynamic Allocation, Code des Beispielprogramms # include <stdio.h> # include < stdlib.h> # include < stdbool.h> struct DynamicArray //Ein Integer Array int * point ; unsigned int size ; unsigned int nextfree ; ; struct DynamicArray array ; //Reserviert Speicher und stellt den Startzustand her void initarray (); //Gibt den Speicher frei und und setzt den Pointer auf Null void finalize (); //Fuegt einen Integer am Ende hinzu. Vergroeßert ggf. das Array void add ( int element ); //Gibt das gesamte Array auf der Konsole aus void printall (); //Liest Einen Integer vom Benutzer ein int getinput (); int main (/* int argc, char** argv */) initarray (); //Benutzerinformationen printf (" Was soll getan werden?\n 0: Beenden \n 1: "); printf (" Element hinzufuegen \ n 2: Array ausgeben \ n "); printf (" 3: Speicher ausgeben \ n 4: Array zuruecksetzen \ n"); 6
7 int input = 0; //Für Benutzerinputs bool running = true ; //Wurde das Programm schon beendet? //Main Loop do //while(running) printf (" Eingabe : "); input = getinput (); switch ( input ) case 0: running = false ; case 1: printf (" Fuege diesen Integer hinzu : "); add ( getinput ()); case 2: printall (); case 3: printf (" Das Array belegt %d Byte.\n", ( array. size * sizeof ( int ))); case 4: finalize (); initarray (); default : printf (" Ungueltige Eingabe. "); printf (" Bitte etwas anderes eingeben.\ n"); input =0; printf ("\n"); while ( running ); finalize (); //Programm endet erfolgreich, wenn der Speicher freigegeben wurde if( array. point!= NULL ) return 1; return 0; void initarray () printf (" Array und Speicherplatz wird initialisiert...\ n"); array = ( struct DynamicArray NULL, 2, 0) ; array. point = malloc ( sizeof ( int ) * array. size ); void finalize () printf (" Speicherplatz wird freigegeben...\ n"); free ( array. point ); array. point = NULL ; void add ( int element ) 7
8 //Wenn kein Platz mehr ist: Vergroeßern if( array. nextfree >= array. size ) array. size *= 2; array. point = realloc ( array. point, sizeof ( int ) * array. size ); //Hinzufuegen des Elements array. point [ array. nextfree ] = element ; printf ("%d hinzugefuegt \n", array. point [ array. nextfree ]); ++ array. nextfree ; void printall () if( array. nextfree!= 0) printf (" Array wird ausgegeben... \n"); for ( unsigned int i =0; i < array. nextfree ; ++i) printf ( " Platz %d: %d\n", i, array. point [i]); else printf (" Das Array ist momentan leer.\ n"); int getinput () int input = 0; char buff [40]; fgets (buff, 40, stdin ); buff [10] = 0 x00 ; //die ersten 10 Zeichen sscanf (buff, "%d", & input ); return input ; 8
Dynamische 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
Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin
Fakutltät IV Technische Universität Berlin 5. Mai 2014 Inhaltsverzeichnis 1 2 3 4 5 6 7 Überblick Beispielprogramm in Java Beispielprogramm in C 1 2 3 4 5 6 7 Beispielprogramm in Java Beispielprogramm
Dynamische Speicherverwaltung
Dynamische Speicherverwaltung INE2 M. Thaler, [email protected] Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? Bisjetzt Beispiel Ranglistenprogramm für Sportveranstaltungen Besser - genaue Anzahl Teilnehmer
Ü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
Programmieren 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[]
Lösungshinweise/-vorschläge zum Übungsblatt 12: Software-Entwicklung 1 (WS 2017/18)
Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 12: Software-Entwicklung 1 (WS 2017/18)
C/C++-Programmierung
1 C/C++-Programmierung Speicherverwaltung, 0, const Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Speicherverwaltung
Advanced 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
Ü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
einlesen n > 0? Ausgabe Negative Zahl
1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen
Crashkurs 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
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
Variablen. 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!
Software 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
Dynamisches Speichermanagement
Dynamisches Speichermanagement Proseminar C-Programmierung - Grundlagen und Konzepte Timo Minartz [email protected] Wissenschaftliches Rechnen Fachbereich Informatik Universität Hamburg
6 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
Einfü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
Speicherverwaltung 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
Probeklausur Name: (c)
Einführung in die Praktische Informatik 30.1.2013 Probeklausur Name: Teil I: Datentypen (20 Punkte) Lösen sie die Probleme, indem sie die korrekten Lösungen ankreuzen bzw. in die vorgesehenen Freiräume
Heap 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
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine
Heap 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
C++ 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
ESP Tutorium. Studienassistent: Ewald Moitzi. Gruppe 1
ESP Tutorium Studienassistent: Ewald Moitzi E-Mail: [email protected] Gruppe 1 Finde den Fehler 1 char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); Finde den Fehler 1 char text[5];
Dynamischer Speicher
Dynamischer Speicher C-Kurs 2012, 3. Vorlesung Tino Kutschbach [email protected] http://wiki.freitagsrunde.org 13. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike
Kontrollfragen Mikrocontroller Programmiersprache C H1203 Felix Rohrer
Block 1 1. Welcher Wert hat w? int w = 034; 28 (Dezimal) 034 wird als Octal interpretiert 34oct = 28dec 2. Wie lauten die Ergebnisse? unsigned int a = 3, b = 5, c = 7; unsigned int x, y, z; x = a == 3;
Ü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
Grundlagen 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
Funktionen, Zeiger und Arrays in C Software Entwicklung 1
Funktionen, Zeiger und Arrays in C Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller 1 Funktionen Mit Hilfe von Funktionen kann man (wie mit Prozeduren bzw. Methoden in Java) eine Problemstellung
Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
DAP2 Praktikum Blatt 1
Fakultät für Informatik Lehrstuhl 11 / Algorithm Engineering Prof. Dr. Petra Mutzel, Carsten Gutwenger Sommersemester 2009 DAP2 Praktikum Blatt 1 Ausgabe: 21. April Abgabe: 22. 24. April Kurzaufgabe 1.1
Praxisorientierte 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,
F Zeiger, Felder und Strukturen in C
F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F.1 Zeiger(-Variablen) 1 Einordnung Konstante: Bezeichnung für einen Wert a 0110 0001 Variable: Bezeichnung eines Datenobjekts
Speichermanagement 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
GI Vektoren
Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung
Variablen und Parameter
D3kjd3Di38lk323nnm Variablen und Parameter Eine Variable repräsentiert einen Speicherbereich, der einen veränderbaren Wert enthält. Eine Variable kann eine lokale Variable, ein Parameter (value, ref oder
Ziele sind das Arbeiten mit Funktionen (Modularisierung, Parameterübergabe), sowie - Reihentyp (Array)
Ziele sind das Arbeiten mit Funktionen (Modularisierung, Parameterübergabe), sowie - Aufgabe 3: Diese Aufgabe baut auf der 2. Aufgabe auf und erweitert diese. Die Funktionalität der 2. Aufgabe wird also
C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?
C- Kurs 08 Dipl.- Inf. Jörn Hoffmann jhoffmann@informa?k.uni- leipzig.de Universität Leipzig Ins?tut für Informa?k Technische Informa?k Überblick Datentyp zur Verwaltung von Adressen (auf Speicherplätze)
Ein kleiner Blick auf die generische Programmierung
TgZero Technik.Blosbasis.net June 3, 2013 1 Inhaltsverzeichnis 1 Vorwort 3 2 Ein kleines Beispiel 3 3 Templates 3 4 Verschiedene Datentypen 4 5 Variadic Templates 5 6 Unterschied zwischen den Programmiersprachen
C++ Notnagel. Ziel, Inhalt. Programmieren in C++
C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt
C++ 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
C++ 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)
C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16
C++ Teil 5 Sven Groß IGPM, RWTH Aachen 8. Mai 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai 2015 1 / 16 Themen der letzten Vorlesung Live Programming zu A2 Gleitkommazahlen Rundungsfehler Auswirkung
Repetitorium Programmieren I + II
Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatoren 2 Datentypen Gleitpunkt Zahl Typkonvertierung 3 Strommanipulatoren 4 Bedingungen if-else switch-case
4.2 Programmiersprache C
4.2.1. Elementare Datentypen (signed) int, unsigned int, (signed) short (int), unsigned short (int), (signed) long (int), unsigned long (int) Elementare Datentypen für ganze Zahlen mit oder ohne Vorzeichen.
Programmieren 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
INE1 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:
Einführung in C. EDV1-04C-Einführung 1
Einführung in C 1 Helmut Erlenkötter C Programmieren von Anfang an Rowohlt Taschenbuch Verlag ISBN 3-4993 499-60074-9 19,90 DM http://www.erlenkoetter.de Walter Herglotz Das Einsteigerseminar C++ bhv Verlags
Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)
Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)
Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download
Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches
1 wsort - Datenstrukturen (1. Möglichkeit)
U4 4. Übung U4 4. Übung Aufgabe 2: qsort - Fortsetzung Dynamische Speicherallokation Fehlerbehandlung Reloaded Infos zur Aufgabe 4: malloc-implementierung U4.1 U4-1 Aufgabe 2: Sortieren mittels qsort U4-1
Zeiger und dynamischer Speicher
Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling [email protected] Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Zuletzt aktualisiert: 09.12.2013, 07:49 Uhr
Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15
Vorwort... 15 1 Einstieg in die Welt von C 17 1.1 Die Sprache C... 17 1.2 Die C-Standardbibliothek... 18 1.3 Die nötigen Werkzeuge für C... 21 1.4 Übersetzen mit der Entwicklungsumgebung... 23 1.5 Übersetzen
Typ : void* aktuelle Parameter Pointer von beliebigem Typ
2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben
Betriebssysteme. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.
Betriebssysteme Tafelübung 4. Speicherverwaltung http://ess.cs.tu-dortmund.de/de/teaching/ss217/bs/ Olaf Spinczyk [email protected] http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware
Betriebssysteme. Agenda. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.
Betriebssysteme Tafelübung 4. Speicherverwaltung http://ess.cs.tu-dortmund.de/de/teaching/ss217/bs/ Olaf Spinczyk [email protected] http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware
Zeiger 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,
6. Zeiger Allgemeines Definition eines Zeigers
6. Zeiger www.c-programme.de Stefan Thiemert Kapitel 6 - Seite 1 von 6 6. 1. Allgemeines Zeiger spielen in der Programmierung eine wichtige Rolle. Sie sind wichtig, bei der Arbeit mit Arrays und Funktionen.
Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.
Ziele sind das Arbeiten mit Zeigern, sowie Records und Funktionen Aufgabe 5: Diese Aufgabe basiert auf der Aufgabe 4. Es ist ein Programm zu erstellen, in welchem der Anwender aus einer Anzahl möglicher
1 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
Exploit-Entwicklung mit Python
Penetration Testing III Bachelor in Computer Science (BCS) 6. Semester Exploit-Entwicklung mit Python von Daniel Baier und Demian Rosenkranz 1 / 20 Gliederung Grundlagen Sicherheitslücken Prozess- und
Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online
Organisatorisches Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Nächste Woche VO und UE am Dienstag, den 30.10.! UE im CR IL/IT Wissensüberprüfung am Zettel 25.10.2018 IT I - VO 3 1 Organisatorisches
Informatik - Übungsstunde
Informatik - Übungsstunde Jonas Lauener ([email protected]) ETH Zürich Woche 12-23.05.2018 Lernziele Klassen Dynamic Memory Jonas Lauener (ETH Zürich) Informatik - Übung Woche 12 2 / 20 Structs
Arrays (Felder/Vektoren)
Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff
Welche Informatik-Kenntnisse bringen Sie mit?
Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt
Einfü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:
Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch
darstellung Arbeiten mit darstellung werden im Computer durch (kleine) Zahlen dargestellt in C können im Datentyp char gespeichert werden, dieser umfasst ein Byte und gilt als Ganzzahltyp darstellung Arbeiten
C++ - 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.
Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren
Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit
Praxis der Programmierung
Dynamische Datentypen Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Dynamische Datentypen 2 Dynamische Datentypen
JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)
JAVA BASICS 2. Primitive Datentypen 1. Warum Java? weit verbreitet einfach und (relativ) sicher keine Pointer (?) keine gotos kein Präprozessor keine globalen Variablen garbage collection objekt-orientiert
Implementieren von Klassen
Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und
