Struktura programu v době běhu

Podobné dokumenty
Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Sdílení dat mezi podprogramy

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Více o konstruktorech a destruktorech

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

ISU Cvičení 7. Marta Čudová

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

8 Třídy, objekty, metody, předávání argumentů metod

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

IUJCE 07/08 Přednáška č. 6

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Abstraktní datové typy: zásobník

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Ukazka knihy z internetoveho knihkupectvi

Úvod do programování - Java. Cvičení č.4

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Algoritmizace a programování

Rekurzivní algoritmy

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Základy programování (IZP)

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Operační systémy. Cvičení 4: Programování v C pod Unixem

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Pointery II. Jan Hnilica Počítačové modelování 17

Programování v C++ 1, 1. cvičení

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programování v C++ 2, 4. cvičení

NMIN102 Programování /2 Z, Zk

O datových typech a jejich kontrole

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Zpracování deklarací a přidělování paměti

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Dynamické datové struktury III.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Ukazatele #2, dynamická alokace paměti

dovolují dělení velkých úloh na menší = dekompozice

5. Dynamické programování

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála.

Funkce, procedury, složitost

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Definice funkcí a procedur. Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu.

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Časová a prostorová složitost algoritmů

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Funkce, intuitivní chápání složitosti

Programování v Javě I. Únor 2009

Jazyk symbolických adres

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Systém adresace paměti

DUM 06 téma: Tvorba makra pomocí VBA

Programování v Javě I. Leden 2008

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Opakování programování

Výpočet v módu jádro. - přerušení (od zařízení asynchronně) - výjimky - softvérové přerušení. v důsledku událostí

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Objektově orientované programování

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.

Úvod do programovacích jazyků (Java)

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

09. Memory management. ZOS 2006, L.Pešička

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

1. Programování proti rozhraní

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

NPRG030 Programování I, 2015/16 1 / :25:32

8. Laboratoř: Aritmetika a řídicí struktury programu

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Seminář Java II p.1/43

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 6: Dynamická alokace paměti, typové konstrukce Autor: RNDr. Jan Lánský, Ph.D.

Algoritmizace a programování

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Základy programování (IZP)

Systém souborů (file system, FS)

konstruktory a destruktory (o)

Ukazatele, dynamická alokace

Úvod do programování. Lekce 5

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Generování vnitřní reprezentace programu

1 Nejkratší cesta grafem

Datové typy a struktury

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

11. Přehled prog. jazyků

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Transkript:

Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů parametry rekurze Struktura programu v době běhu 2 Systém řízení běhu programu Inicializace programu převzetí parametrů od systému alokace paměti pro data otevření standardních souborů (Pascal) Finalizace programu uzavření souborů uvolnění paměti předání stavového kódu Systém řízení běhu programu Zpracování chyb přerušení a výjimky (definované uživatelem, systémové a aplikační chyby,...) automatické kontroly (přetečení zásobníku, ukazatele, indexy, parametry,...) Dynamické přidělování paměti zásobník volná paměť Struktura programu v době běhu 3 Struktura programu v době běhu 4 1

Systém řízení běhu programu Komunikace s operačním systémem soubory, čas, Volací a návratové posloupnosti Podpora pro ladění programu Podprogramy Procedury jméno -> příkaz Funkce jméno -> výraz + parametrizace Struktura programu v době běhu 5 Struktura programu v době běhu 6 Příklad void main() { int fib(int n) { if( n < 2 ) return 1; return fib(n-2) + fib(n-1); } void print(int n) { for(int k = 1; k <= n; k++) printf( %d: %d, k, fib(k)); } int max; scanf( %d, &max); print(max); } Definice podprogramu Jméno Formální parametry (parametry) jméno typ způsob předávání Tělo Struktura programu v době běhu 7 Struktura programu v době běhu 8 2

Aktivace podprogramu Skutečné parametry (argumenty) Doba života aktivace od zavolání podprogramu po návrat zpět obvykle se nepřekrývají nebo jsou do sebe vnořeny (výjimka: vlákna, procesy) Rekurzivní podprogramy nová aktivace se může spustit před ukončením předcházející Příklad fib(4) fib(0) fib(1) fib(3) fib(1) fib(0) fib(1) Doba života aktivace Struktura programu v době běhu 9 Struktura programu v době běhu 10 Úroveň zanoření Příklad Statická úroveň zanoření je definována zdrojovým programem C, Java pouze jedna úroveň Dynamická úroveň zanoření je definována zanořováním aktivací kolik aktivací je současně rozpracováno fib(3) fib main 0 print 1 main print(5) fib(4) fib(5) 0 1 2 Statické zanoření Dynamické zanoření Úroveň zanoření je dána vzdáleností uzlu od kořene stomu fib(3) fib(0) fib(1) fib(1) 3 4 Struktura programu v době běhu 11 fib(0) fib(1) 5 Struktura programu v době běhu 12 3

Lokální data aktivace Aktivační záznam lokální proměnné (+dočasné proměnné) návratová adresa uschovaný obsah registrů Jazyky bez rekurzivních podprogramů aktivační záznamy mohou být alokovány staticky v době překladu (FORTRAN) Lokální data aktivace Jazyky s rekurzivními podprogramy zásobník aktivačních záznamů řídicí zásobník obsahuje všechny aktivační záznamy od kořene stromu aktivací až po aktivní uzel (podprogram) Struktura programu v době běhu 13 Struktura programu v době běhu 14 Příklad Struktura paměti fib(0) fib(4) print(5) Cílový program program, konstanty Statická data Řídicí zásobník aktivační záznamy (lokální proměnné) Volná paměť globální a statické proměnné dynamicky alokovaná paměť (hromada heap) main Struktura programu v době běhu 15 Struktura programu v době běhu 16 4

Schéma obsazení paměti Metody přidělování paměti heap řídicí zásobník statická neinicializovaná data inicializovaná Vytváří se během inicializace programu. Přiděleno pro běh programu Statické přidělování v době překladu Přidělování na zásobníku Přidělování z volné paměti (heap) cílový program Uloženo ve spustitelném souboru Struktura programu v době běhu 17 Struktura programu v době běhu 18 Přidělování paměti pro aktivační záznamy Statické přidělování paměti adresy všech proměnných jsou známy v době překladu lokální proměnné mohou přežít volání programu (viz static v C) počet a velikost prvků musíme znát v době překladu omezená možnost rekurze (sdílení proměnných) obsahy předchozích aktivačních záznamů můžeme odkládat na zásobník Přidělování paměti pro aktivační záznamy Přidělování na zásobníku vhodné pro jazyky s rekurzí paměť se přidělí v okamžiku volání uvolnění paměti proběhne při návratu relativní adresování proměnných offsety jsou známy v době překladu neznáme-li velikost parametrů -> deskriptor [adresa, délka] Příklad: řetězce, otevřená pole Struktura programu v době běhu 19 Struktura programu v době běhu 20 5

Přidělování paměti pro aktivační záznamy Přidělování z volné paměti lokální proměnné mohou přežít aktivaci podprogramu, resp. aktivace volaného podprogramu může přežít aktivaci volajícího podprogramu -> nelze použít zásobník alokace paměti při inicializaci aktivace, finalizace až ve chvíli, kdy není potřebná implementace paralelních jazyků Volací a návratové posloupnosti Definice adresy aktivačního záznamu Uložení stavu (registry, příznaky, návratová adresa) Inicializace lokálních dat Uložení výsledku Obnovení předchozího stavu Obnovení adresy aktivačního záznamu volajícího Návrat za místo volání Struktura programu v době běhu 21 Struktura programu v době běhu 22 Přístup k nelokálním datům Schéma - Příklad Lokální data uložena v aktivačních záznamech Globální data uložena staticky Lokální data staticky nadřazeného podprogramu přístupové ukazatele display dynamická vazba fib(4) print(5) table statická vazba fib(4) print(5) table 2 1 0 display Struktura programu v době běhu 23 přístupové ukazatele struktura display Struktura programu v době běhu 24 6

Předávání parametrů Hodnotou, výsledkem, hodnotou a výsledkem parametr je lokální proměnnou v těle podprogramu hodnota se kopíruje z (do) argumentu během volání (návratu) void p(int x) { { volání p(a) x = x+1 nezmění prom. a } {a=10} p(a) {a=10} Předávání parametrů Odkazem parametr se předá jako ukazatel na argument změna parametru se projeví ihned změnou argumentu ekvivalentní předávání adresy hodnotou jako v C/C++ void p(int& x); {a=10} p(a) {a=11} Jaký je rozdíl mezi předáváním odkazem a hodnotou/výsledkem? Struktura programu v době běhu 25 Struktura programu v době běhu 26 Předávání parametrů Jménem parametr se vyhodnocuje při každé referenci podobné jako makrodefinice procedure p(name x:integer) begin j:=1; x:=x+1 end; Algol 60 p(a[j]) j:=1 a[j]:=a[j]+1 Podprogramy jako parametry procedure A; var m:real; procedure B(procedure P); begin P end; m je viditelné procedure C; var x:real; procedure D; begin end; procedure E; begin B(D) end; begin E end; D může použít m, x begin C end; Struktura programu v době běhu 27 Struktura programu v době běhu 28 7

Podprogramy jako parametry Kromě adresy parametru se předává ukazatel na aktivační záznam volajícího deskriptor podprogramu = adresa + okolí Podobné předávání parametru jménem předává se adresa podprogramu, který vyhodnotí parametr Proměnné typu funkce/procedura problémy s platností deskriptoru Reprezentace datových typů Primitivní datové typy: char, int, double výčet, interval stejně jako int Pole A[0] A[1] A[2] Záznamy, struktury Struktura programu v době běhu 29 zarovnání Struktura programu v době běhu 30 Reprezentace datových typů Soubory Struktura (objekt) s těmito údaji: adresa a velikost vyrovnávací paměti současná pozice pro čtení/zápis vazba na OS - file handle příznaky - eoln, eof, Množina posloupnost bitů Reprezentace datových typů Ukazatel adresa reference Procedura/Funkce deskriptor [adresa, okolí] = closure Struktura programu v době běhu 31 Struktura programu v době běhu 32 8