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Í

Sdílení dat mezi podprogramy

Algoritmizace a programování

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

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

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

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

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

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

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

ISU Cvičení 7. Marta Čudová

Abstraktní datové typy: zásobník

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

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

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

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

Virtuální metody - polymorfizmus

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

Více o konstruktorech a destruktorech

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

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

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

Datové typy a struktury

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

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

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

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

Časová a prostorová složitost algoritmů

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

DUM 06 téma: Tvorba makra pomocí VBA

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

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

Seminář Java II p.1/43

Ukazka knihy z internetoveho knihkupectvi

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

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

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

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

PREPROCESOR POKRAČOVÁNÍ

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

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

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

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

Programovací jazyk Pascal

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

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.

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

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

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

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

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

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

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

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

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

5. STRUKTURA PLC PROGRAMU

VISUAL BASIC. Přehled témat

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

Rozklad problému na podproblémy

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

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

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

Systém adresace paměti

Rekurzivní algoritmy

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

Paměti a jejich organizace

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

Procesy a vlákna (Processes and Threads)

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

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

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:

Programování II. Návrh programu I 2018/19

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

Jazyk symbolických adres

Úvod do informatiky. Miroslav Kolařík

Přidělování paměti II Mgr. Josef Horálek

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

Sada 1 - Základy programování

Paralelní programování

Úvod do programovacích jazyků (Java)

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

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

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 -

O datových typech a jejich kontrole

Úvod do programování. Lekce 5

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

Datové struktury. alg12 1

Implementace binárního stromu směrníky

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

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

Implementace LL(1) překladů

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Stromy, haldy, prioritní fronty

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 lze použít pro: Globální proměnné Static proměnné Proměnné jazyka bez rekurze (i s vnořenou blokovou strukturou) Př. 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í lze realizovat pomocí zásobníku Ukažme 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 Část paměti přidělovaná při vstupu výpočtu do rozsahové jednotky programu se nazývá Aktivační Záznam ( AZ představuje lokální prostředí výpočtu). Obsahuje místo pro: Lokální proměnné Parametry (je-li rozsahovou jednotkou podprogram či funkce) Návratovou adresu ( ) Funkční hodnotu (je-li rozsahová jednotka 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 (ukazuje na lexikálně nadřazený AZ) 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 Uvažujme zásobník Z, s vrcholem T směr růstu 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 proměnné je dvojice (n, p) = displej[n] + p

Objekty s dynamickými typy (typicky pole s proměnnými mezemi) 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 Statická část AZ Ukazatel objektu Deskriptor se vytvoří při překladu, uchovat se ale musí i při výpočtu 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) -v případě strukturovaných parametrů -jsou-li to statické typy předá se adresa prvého prvku -jsou=li to dynamické typy předá se ukazatel na descriptor -je je-li parametrem podprogram -u jazyků nedovolujících hnízdění podprogramů předá se adresa začátku = pointer - u jazyků dovolujících hnízdění podprogramů spolu s adresou musí předdat i platné prostředí. Jsou různé možnosti co považovat za 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; x 1; P3( ) ; call Px( ); prostředí, kde je předávaný podprogram definován prostředí, kde je vydán příkaz volání s parametrem podprog. prostředí, v němž je volán formální podprogram 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);

Stav před vyvoláním a po vyvolání FP

Pro uložení AZ paralelního výpočtu nutno použít haldu nebo zobecněný zásobník