Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Podobne dokumenty
Zaawansowane programowanie w języku C++ Klasy w C++

Zaawansowane programowanie w języku C++ Wyjątki

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Architektura komputerów Wprowadzenie do algorytmów

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Programowanie w języku C++

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

Zaawansowane programowanie w języku C++ Biblioteka standardowa

DYNAMICZNE PRZYDZIELANIE PAMIECI

Architektura komputerów Reprezentacja liczb. Kodowanie rozkazów.

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Podstawy programowania w języku C++

Systemy operacyjne na platformach mobilnych 2 Platforma Maemo

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Architektura komputerów Historia systemów liczących

Systemy operacyjne na platformach mobilnych 2 Podstawy obsługi powłoki Bash

ZASADY PROGRAMOWANIA KOMPUTERÓW

Zaawansowane programowanie w języku C++ Wstęp

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Wykład 1: Wskaźniki i zmienne dynamiczne

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Podstawy programowania w języku C++

Programowanie obiektowe w C++ Wykład 1

Systemy operacyjne na platformach mobilnych 3 Wstęp do systemu Android

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Studia podyplomowe realizowane w ramach zadania 5 Systemy mobilne i techniki multimedialne

dr inż. Małgorzata Langer Architektura komputerów

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Mikrosystemy Wprowadzenie. Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt.

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Podstawy programowania komputerów

PARADYGMATY PROGRAMOWANIA Wykład 4

Medical electronics part 9a Electroencephalography (EEG)

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Programowanie komputerowe. Zajęcia 4

Wskaźniki w C. Anna Gogolińska

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Układy reprogramowalne i SoC Implementacja w układach FPGA

Szablony funkcji i szablony klas

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

4. Procesy pojęcia podstawowe

Micha Strzelecki Metody przetwarzania i analizy obrazów biomedycznych (2)

3 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.06 Rok akad. 2011/ / 22

Zarządzanie pamięcią operacyjną

Wykład 4: Klasy i Metody

Programowanie obiektowe W3

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

4. Procesy pojęcia podstawowe

Wprowadzenie do szablonów klas

Układy reprogramowalne i SoC Język VHDL (część 4)

Lab 9 Podstawy Programowania

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Zmienne i struktury dynamiczne

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Łukasz Januszkiewicz Technika antenowa

Wstęp do programowania

ZARZĄDZANIE SIECIAMI TELEKOMUNIKACYJNYMI

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Kompilator języka C na procesor 8051 RC51 implementacja

Wskaźniki. Programowanie Proceduralne 1

Wskaźniki. Przemysław Gawroński D-10, p Wykład 1. (Wykład 1) Wskaźniki / 9

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

dr inż. Paweł Myszkowski Wykład nr 8 ( )

Wykład 3 Składnia języka C# (cz. 2)

Wskaźniki. Informatyka

Adam Kotynia, Łukasz Kowalczyk

KURS C/C++ WYKŁAD 6. Wskaźniki

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Język C++ Różnice między C a C++

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Wykład 2: Podstawy Języka

Techniki Programowania wskaźniki 2

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Szablony klas, zastosowanie szablonów w programach

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Spis treści JĘZYK C - WSKAŹNIKI, DYNAMICZNY PRZYDZIAŁ PAMIĘCI. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Podstawy programowania obiektowego

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Tablice, funkcje, wskaźniki - wprowadzenie

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Wyjątki (exceptions)

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Laboratorium nr 10. Temat: Funkcje cz.2.

Zaawansowane programowanie w języku C++ Podstawy programowania w C++

Microsoft IT Academy kurs programowania

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

Język ludzki kod maszynowy

Transkrypt:

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Projekt Łódzka, współfinansowany ul. Żeromskiego przez Unię 116, Europejską 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego

Zarządzanie pamięcią Pamięć obok czasu procesora jest podstawowym zasobem systemów komputerowych Pamięć jest zasobem skończonym! Każdy program korzysta z pamięci Zarządzanie pamięcią: Systemy mikroprocesorowe działające bez wsparcia ze strony systemu operacyjnego Systemy komputerowe kontrolowane przez system operacyjny 2

Komputery bez systemu operacyjnego Programista jest odpowiedzialny za zarządzanie całą dostępną w systemie pamięcią Konieczne jest zaplanowanie sposobu użycia pamięci mapa pamięci Brak kontroli odwołań do pamięci możliwość zmiany wartości dowolnej komórki pamięci modyfikacja danych innych programów lub funkcji Szybkość systemu Bardzo trudne przenoszenie aplikacji na inną architekturę sprzętową lub nawet inną konfigurację (zmiana rozmiaru pamięci, jej typu itd.) 3

Komputery z systemem operacyjnym System operacyjny zarządza dostępną pamięcią programista prosi o jej przydzielenie dla aplikacji Programista nie skupia się (w większości) na fizycznej lokalizacji programów w pamięci Pełna kontrola odwołań do pamięci programista może korzystać jedynie z przydzielonych przez system operacyjny bloków pamięci Dodatkowy narzut czasowy na zadania realizowane przez system operacyjny Aplikacja przenośna na poziomie API systemu operacyjnego lub bibliotek 4

Wniosek Jeżeli możemy to korzystamy z dobrodziejstw, które zapewnia nam system operacyjny. Ale jego wybór to już całkiem inna sprawa... 5

Typ pamięci z punktu widzenia aplikacji Pamięć statyczna przydzielana podczas uruchamiania aplikacji przez system operacyjny jej minimalna wielkość obliczana jest podczas kompilacji nie można jej zwiększyć w trakcie działania aplikacji (z punktu widzenia struktur danych) realizowana jest jako stos (ang. stack) Pamięć dynamiczna przydzielana jest przez system operacyjny dynamicznie podczas działania aplikacji jej wielkość wyliczana jest w trakcie działania aplikacji Realizowana jest jako sterta (ang. heap) 6

Przydzielanie pamięci przez system operacyjny System operacyjny dzieli pamięć na strony (ang. pages) strony to ciągłe obszary pamięci o ustalonej wielkości system zazwyczaj dzieli całą pamięć na strony o równej wielkości (wyjątkiem są systemy operacyjne optymalizowane pod konkretne zastosowanie, np: bazy danych) Typowa wielkość strony to 4 kb (4096 B) na architekturze x86 możliwe jest skorzystanie dodatkowo ze stron o rozmiarze 1, 2 i 4 MB Strona to nie tylko jednolity obszar pamięci przydzielany aplikacji ale także element polityki bezpieczeństwa systemu System operacyjny nie ma możliwości przydzielenia aplikacji mniejszej jednostki pamięci niż strona! 7

Pamięć w C++ struct Complex { float re; float img; }; 8

Pamięć statyczna w C++ int main() { Complex a = {2, 3}, b = {-1, 2};... return 0; } 9

Pamięć dynamiczna w C++ int main() { Complex *a, *b; a = new Complex; a->re = 2; a->img = 3; b = new Complex; b->re = -1; a->img = 2;... return 0; } 10

Najważniejsza zasada! To co system łaskawie nam przydzielił zwracamy, gdy tylko tego już nie potrzebujemy! 11

Pamięć dynamiczna w C++ int main() { Complex *a, *b; a = new Complex; a->re = 2; a->img = 3; b = new Complex; b->re = -1; a->img = 2; delete a; delete b; return 0; } 12

Kiedy samemu zarządzać pamięcią w C++? Kiedy nie znamy rozmiaru wymaganej pamięci w trakcie kompilacji rozmiar pamięci zależy od danych wejściowych rozmiar pamięci jest wynikiem obliczeń wykonywanych w trakcie działania programu ograniczony rozmiar stosu programu Kiedy tworzymy dane lub bufory współdzielone przez różne bloki programu (funkcje, obiekty, wątki) 13

Wniosek Sterta jest pamięcią wspólną dla całego programu (a dokładnie procesu) Stos jest pamięcią skojarzoną z danym blokiem programu (funkcją, metodą, wątkiem) 14

Operator new Słowo kluczowe new jest operatorem, a nie funkcją (podobnie jak inne operatory języka C++: +, /, && itd.) Zadaniem operatora new jest przydzielenie pamięci dynamicznej (sterty) dla obiektu (struktury danych) przekazanego jako argument Operator new zwraca wskaźnik do przydzielonego obszaru pamięci Operator new do przydzielenia pamięci korzysta z wywołań systemu operacyjnego Operator new nie gwarantuje, że pamięć o którą prosimy będzie przydzielona! wartość NULL Wyjątek bad_alloc 15

Definicja operatora new Nie idziemy na łatwiznę :) 16

Operator delete Pozwala na dealokację przydzielonej przez operator new pamięci Operator delete sprawdza czy przekazany argument (adres) nie jest równy NULL Operator delete nie ustawia przekazanego jako argument wskaźnika na wartość NULL po zwolnieniu pamięci Operator delete zawsze wykona się prawidłowo (nie zwraca błędu i nie generuje wyjątku) 17

Definicja operatora delete Nie idziemy na łatwiznę :) 18

Pamięć dynamiczna w C++ - tablice int main() { Complex *a; a = new Complex[100]; std::cout << a[20].img << std::endl; delete[ ] a; return 0; } 19

Definicja operatora new[ ] Nie idziemy na łatwiznę :) 20

Definicja operatora delete[ ] Nie idziemy na łatwiznę :) 21

Operator placement new #include<new> int main() { unsigned long *buffer = new unsigned long[100]; Complex *p = new( buffer ) Complex;... delete[] buffer; return 0; } 22

Definicja operatora placement new Nie idziemy na łatwiznę :) 23

Zagadka char tab[10]; int i = 2; tab[i] = 1; i[tab] = 1; 24

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego