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ě

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ě

Struktura programu v době běhu

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

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

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

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

Algoritmizace a programování

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

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

Sdílení dat mezi podprogramy

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

ISU Cvičení 7. Marta Čudová

Abstraktní datové typy: zásobník

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

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

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

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

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

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

Přerušovací systém s prioritním řetězem

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

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

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Text úlohy. Systémový katalog (DICTIONARY):

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Datové typy a struktury

Ukazka knihy z internetoveho knihkupectvi

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

PODPROGRAMY PROCEDURY A FUNKCE

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

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

Virtuální metody - polymorfizmus

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

4.3 Operace nad ordin ln mi datov mi typy Operace nad logick m datov m typem Operace nad celo seln mi datov mi typy

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

1.Charakterizujte křížový překladač 2.Objasněte pojem silikonový překladač 3.Co to jsou formátory textu? Uveďte příklad

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

Akademický rok: 2004/05 Datum: Příjmení: Křestní jméno: Osobní číslo: Obor:

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

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

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

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

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

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Časová a prostorová složitost algoritmů

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

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

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

Seminář Java II p.1/43

Více o konstruktorech a destruktorech

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

Rekurzivní algoritmy

Procesy a vlákna (Processes and Threads)

Programovací jazyk Pascal

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

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

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

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.

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

PREPROCESOR POKRAČOVÁNÍ

Paralelní programování

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

Sada 1 - Základy programování

5. STRUKTURA PLC PROGRAMU

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

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

O datových typech a jejich kontrole

VISUAL BASIC. Přehled témat

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Rozklad problému na podproblémy

Systém adresace paměti

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

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

PB161 Programování v jazyce C++ Přednáška 7

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

PB161 Programování v jazyce C++ Přednáška 7

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

1. D Y N A M I C K É DAT O V É STRUKTUR Y

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

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

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

Přednáška. Správa paměti I. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Jazyk symbolických adres

přetížení operátorů (o)

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

Úvod do programovacích jazyků (Java)

DUM 06 téma: Tvorba makra pomocí VBA

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

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

Operační systémy. Přednáška 7: Správa paměti I

1. Programování proti rozhraní

Počítač jako prostředek řízení. Struktura a organizace počítače

5 Rekurze a zásobník. Rekurzivní volání metody

Úvod do programování. Lekce 5

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

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

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

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Transkript:

Metody přidělování paměti 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ě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické proměnné Rekurze Konstrukce pro paralelní výpočty Podstatný je rovněž způsob: Omezování existence entit v programu (namespace, package, blok ) Určování přístupu k nelokálním entitám na základě statického vnořování rozsahových jednotek, na základě dynamického vnoření rozsahových jednotek. Rozdělění paměti cílového programu Oblast programového kódu Statická datová oblast Dynamická dat. oblast zásobník Dynamická dat. oblast halda

Statické přidělování paměti Globální proměnné Static proměnné Proměnné jazyka bez rekurze (i s blokovou strukturou) lok1 místoa lok2 místo lok3 místoc Konec bloku3 lok4 místod Konec bloku4 místoe Konec bloku2 místof Konec bloku1 Statické přidělování pomocí zásobníku? obsah zásobníku v různých okamžicích výpočtu loky 3 4 2 2 2 2 1 1 1 1 1 1 Místo A C D E F

Dynamické přidělování v zásobníku Aktivační Záznam ( AZ představuje lokální prostředí výpočtu) obsahuje místo pro: Lokální proměnné Parametry Návratovou adresu Funkční hodnotu (je-li podpr. funkcí) Pomocné proměnné pro mezivýsledky (také možno v registrech) Další informace potřebné k uspořádání aktivačních záznamů Př. lok 1 Podprogram 2 Volání podprogramu 2 lok3 Volání podprogramu2? stav výpočtového zásobníku a) Při vstupu do bloku 3 b) Při prvním volání podprogramu 2 c) Při rekurzivním vyvolání podprogramu 2 AZ podpr 2 AZ popdpr2 AZ podpr 2 AZ bloku3 AZ bloku3 AZ bloku3 AZ bloku 1 AZ bloku 1 AZ bloku 1 a) b) c)

Uspořádání aktivačních záznamů při rekurz. vyvolání podpr.2 s dynamickým řetězcem pro rušení AZ při výstupu z rozsahové jednotky Proměnné podprogranu 2 Parametry podprogramu 2 Ukazatel na dynamicky nadřazený AZ Návratová adresa Proměnné podprogranu 2 Parametry podprogramu 2 Ukazatel na dynamicky nadřazený AZ Návratová adresa Proměnné bloku 3 Ukazatel na dynamicky nadřazený AZ Nic /*není to podprogram*/ Proměnné bloku 1 nil /*jsme v AZ na dně zásobníku*/ nic /*není to podprogram*/ Obr. Zásobník při rekurzivním volání podprogramu 2 je registr ukazující na vrcholový AZ Potřebujeme ještě vyřešit přístup k nelokálním proměnným při statickém = lexikálním rozsahu platnosti jmen. To řeší tzv. řetězec statických ukazatelů

Aktivační Záznam Podprogramu 2 Aktivační Záznam dynamický řetězec ukazatelů Podprogramu 2 statický řetězec ukazatelů Aktivační Záznam loku 3 Aktivační Záznam loku 1 Obr. Zásobník se statickým a dynamickým řetězcem ukazatelů při rekurzivním volání podprogramu 2

Vytváření řetězců ukazatelů Nechť AZ má tvar: pomocné proměnné Lokální proměnné Parametry Funkční hodnota Statický ukazatel Dynamický ukazatel Návratová adresa Zásobník Z, s vrcholem T Při stupu do rozsahové jednotky (vyvolání podprogramu nebo vstupu výpočtu do bloku = Aktivace rozsahové jednotky): A1) Z[ T + 1 ] návratová adresa /* pouze u podprogramů*/ A2) Z[ T + 2 ] /*nastavení dynamického ukazatele*/ A3) Z[ T + 3 ] For i 1 to m n do Z[ T + 3 ] Z[ Z[ T + 3 ] + 2] /*nastavení statického ukazatele*/ A4) T + 1 /*nastavení bázového registru*/ A5) T T + velikost aktivačního záznamu A6) skok na první instrukci podprogramu a uložení do Z údajů o skutečných parametrech /*pouze u podprogramů*/ Pozn. Je-li podprogram překládán odděleně (neznámá velikost jeho AZ), pak je úprava T provedena až na začátku volaného podprogramu. Při výstupu z rozsahové jednotky (Návrat z podprogramu nebo průchod koncem bloku): N1) T 1 N2) Z[ + 1 ] N3) skok na adresu uloženou v Z[ T + 1] /*pouze u podprogramů*/ Výstup z rozsahové jednotky nelokálním Skokem (hladina n deklarace návěští je menší než hladina m místa s příkazem skoku) Vždy platí n m S1) for i 1 to m n do { Pom repeat T 1 Z[ + 1] until Z[ POM + 2] S2) skok na adresu, kterou návěští představuje

Př. Podprogram Vnější Label 1 Podprogram A Podprogram Volání D Volání Podprogram D Goto 1 Volání A 1: a) obsah Z při provádění, před voláním D, b) obsah Z po vyvolání D, ped provedením nelokálního skoku, c) obsah Z po provedení skoku. T Aktivační Záznam D T Aktivační Záznam aktivační záznam Aktivační Záznam A aktivační záznam A T Aktivační aktivační aktivační Záznam záznam záznam Vnější Vnější Vnější a b c

Zrychlení přístupu k nelokálním proměnným (pomocí vektoru ukazatelů displej[i], kde i je hladina rozs. jedn.) T A displej[3] displej[2] displaj[1] Vnější Obr. Stav Z při výpočtu T D A displej[3] displej[2] displaj[1] Vnější Obr. Stav Z při výpočtu D Dynamická adresa (n, p) = displej[n] + p

Objekty s dynamickými typy Možnosti struktury aktivačního záznamu s objektem dynamického typu Složky objektu dynamického typu dynamická část Složky objektu dynamického typu Deskriptor objektu Deskriptor objektu Ukazatel objektu Ukazatel objektu Př. Aktivačního záznamu s objekty dynamického typu podprogram PRIKLAD; int i, j ; int A(m.. n); int (p.. q, r.. s, ); dynamická místo pro prvky pole část místo pro prvky pole Descriptor Ukazatel na prvky statická část Descriptor A Ukazatel na prvky A i j Parametry podprogramu Statický ukazatel Dynamický ukazatel Návratová adresa

Předávání parametrů podprogramům -hodnotou (C, C++, Java,C#) formální parametr je lokální proměnnou do níž se předá hodnota -odkazem (C, C++ je-li parametrem pointer, objektové parametry Javy, C# označené ref ) předá informaci o umístění skutečného parametru -výsledkem - formální parametr je lokální proměnnou z níž se předá hodnota do skutečného parametru před návratem z podprogramu -hodnotou výsledkem (novější Fortran ) - kombinace -jménem má efekt textové substituce (jako historická zajímavost) -strukturované parametry -statické typy adresa prvého prvku -dynamické typy ukazatel na descriptor -podprogramy -u jazyků j nedovolujících hnízdění podprogramů adresa začátku = pointer - u jazyků dovolujících hnízdění podprogramů Spolu s adresou musí předdat i platné prostředí -mělká vazba platné je prostředí v němž se nachází volání formálního podprogramu -hluboká vazba platné je prostředí kde je předávaný podprogram definován -ad hoc vazba platné je prostředí kde je vydán příkaz volání podprogramu jež má za parametr podprogram

Př. Podprogram P1( ) { Prom x ; Podprogram P2 ( ) { Vytiskni (x) ; /*co se tady tiskne?*/ ; Podprogram P3 ( ) { Prom x ; x 3; P4(P2) ; ; Podprgram P4( podprogram Px ) { Prom x ; x 4; call Px( ); x 1; P3( ) ; Při mělké vazbě se tiskne Při hluboké vazbě se tiskne Při ad hoc vazbě se tiskne Př. Předpokládejme hlubokou vazbu. Co se vytiskne po spuštění procedury Vnější? podprogram Vnejsi; { prom i:int; podprogram P( podprogram FP; prom k:int;) { prom i:int; i k+1; FP( ); tisk(i); podprogram Q(i:int); podprogram R ( ) { Tisk(i); P(R,i); i 0; Q(i+1);