Organizace dat v paměti RAM
C++ 11

image_printTisk

Tento článek poskytuje teoretický úvod do způsobu uspořádání paměti aplikace. Seznámíme se s jednotlivými bloky paměti a jejich významem a dále bude výklad stručně doplněn o téma virtualizace paměti s pomocí operačního systému a tím buzení dojmu její větší velikosti, než má počítač ve skutečnosti k dispozici.

Na diagramu vlevo je schema, jak program či proces “vidí” uspořádání svojí paměti. Je na něm znázorněno uspořádání jednotlivých oblastí paměti, které aplikace využívá, od nejnižších adres až po ty nejvyšší. U nejnižších adres sídlí obslužné rutiny operačního systému, které jsou volány programem například, pokud potřebuje zapsat nějaká data na disk nebo třeba vytisknout dokument. Za tímto blokem následuje vlastní spustitelný strojový kód programu, na diagramu znázorněný žlutým obdélníkem. Za tímto blokem pak jsou vlastní staticky umístěná data programu. Toto byly popsány zatím oblasti paměti pevné velikosti.

Nyní přistupme k vysvětlení dvou zbývajících bloků paměti, které nemají pevnou velikost. Jsou to dynamicky alokovaná paměť a zásobník. Na diagramu je vidět, že jsou alokovány adresově proti sobě. Dynamicky alokovaná paměť roste od nižších adres k vyšším a zásobník naopak.

Dynamicky alokovaná paměť se získává v C++ pomocí nízkoúrovňového operátoru new a její uvolnění má na starosti operátor delete. Tyto operátory si popíšeme v jednom z následujícím článku. Dynamicky alokovaná paměť se používá hlavně v případech, kdy potřebujeme pracovat s daty velkého rozsahu nebo pokud je potřebná velikost konkrétního bloku paměti známá až za běhu aplikace.

Zásobník je věc spíše systémová. Ukládají se na něj všechny lokální proměnné funkcí včetně dalších systémových dat, jejichž popis je nad rámec těchto stránek.

Na začátku článku bylo zmíněno, že diagram poskytuje vhled do uspořádání paměti, jak jej program “vidí”. Ve skutečnosti je to jen zdánlivý obraz, který poskytuje operační systém ve spolupráci s mikroprocesorem pro každý spuštěný aplikační proces. O této virtualizaci se říká, že každý program má svůj vlastní virtuální adresový prostor.

Ve skutečnosti je paměť rozdělená na oblasti stejné délky nazývané stránky. Adresy jsou potom automaticky překládány z virtuálního adresového prostoru programu na adresu fyzickou v paměti a s touto hodnotou teprve až pak hardware počítače pracuje. Při přístupu do nějaké stránky v paměti RAM ještě může být situace komplikovanější tím, že nemusí být umístěna vůbec v paměti. Operační systémy v dnešní době obsahují soubor nebo jinou oblast na disku, kam odkládají data stránek v RAM, ke kterým dlouho nikdo nepřistupoval. Pokud nastane tato situace, operační systém bude muset napřed načíst příslušnou stránku z disku do RAM, a až pak teprve může aplikace dále pokračovat. Proces stránkování a virtualizace paměti je ale nad rámec těchto stránek a bližší informace můžete nalézt na Wikipedii.

image_printTisk
Organizace dat v paměti RAM
C++ 11
5 (100%) 1 hlasů

Související články

  • Seznamy hodnot podrobněji V tomto článku se blíže seznámíme se seznamy hodnot. Máme na výběr dva typy seznamů. Seznam s pevným počtem položek nebo seznam s proměnlivým počtem položek. Seznam s pevným počtem […]
  • Chytré ukazatele Často potřebujeme alokovat, či jinak řečeno si rezervovat, paměť na dynamické části paměti, jelikož neznáme potřebnou délku v době kompilace programu, ale až za jeho běhu. Například […]
  • Překlad do strojového kódu V tomto článku se seznámíme s tím, jak překladač převádí zdrojový kód programu do binární podoby spustitelné operačním systémem. Článek se zmiňuje nejen o procesu překladu zdrojových kódů, […]
  • Strukturované datové typy Při psaní jakéhokoliv programu si nevystačíme často jen v čísly a texty. Potřebujeme třeba si například definovat náš vlastní datový Zákazník, který bude reprezentovat nějaký pojem v […]
  • Funkce a její parametry V tomto článku si blíže vysvětlíme pojem funkce v C++, seznámíme se s jejím syntaktickým zápisem včetně zápisu formálních parametrů a dále bude vysvětleno, jak se z funkcí provádí vracení […]
  • Obsluha chyb pomocí výjimek Tento článek je článkem úvodním tematice obsluhy chyb v jazyce C++. V tomto článku si představíme motivaci zavedení výjimek jazyka C++ jako aparátu pro detekci a zpracování chyb. Dále […]