Chcete vytvořit textový editor. Možná je to moderní náhrada za Vi nebo nový pohled na Poznámkový blok. Na tom nezáleží. Cíl je jednoduchý: umožnit uživatelům upravovat standardní soubory ASCII.
Zamyslete se nad tím, jak často programátoři tyto nástroje skutečně používají. Toto je jejich hlavní rozhraní se strojem. To je místo, kde se myšlenky mění v kód. Přirozeně chcete, aby to bylo správné. Chcete, aby to bylo rychlé. Chcete, aby zvládl váš konkrétní pracovní postup. Rozhodnete se tedy vytvořit si vlastní.
První překážkou je datová struktura. Jak uložit text do paměti? Potřebujete způsob, jak rychle manipulovat se symboly. Jaká je vaše počáteční intuice? Řádky textu.
Vezmi pole. Dost jednoduché. Typický řádek obsahuje 80 znaků. Typický soubor má řekněme 1000 řádků. Deklarujete dvourozměrné pole:
To je 80 000 znaků. Ovladatelné. Čistě.
Ale pak vás zasáhne realita. Přemýšlíte o okrajových případech.
Některé soubory jsou obrovské protokoly. Tisíce řádků, každý sotva 10 znaků dlouhý.
Ostatní soubory jsou datové výpisy pro zvláštní účely. Jeden řádek může obsahovat 542 znaků představujících páry aminokyselin v sekvenci DNA.
A moderní editory umožňují otevřít několik souborů současně. Řekněme, že tento počet omezíte na 10 otevřených souborů. Nastavíte pevný limit 1000 znaků na řádek a 50 000 řádků na soubor.
Vaše reklama nyní vypadá takto:
Provádíte výpočty. 50 000 krát 1 000 krát 10. To je 500 milionů znaků.
Většina počítačů to nezvládne. I s virtuální pamětí to vytváří zátěž. Spusťte tři instance svého editoru na víceuživatelském systému a přetížíte RAM. To je extravagantní plýtvání. Přidělujete prostor pro absolutně nejhorší scénář, kdy většina uživatelů pouze upravuje 100řádkové soubory, které zabírají 4000 bajtů.
Problémem polí je jejich tuhost. Musíte předem deklarovat maximální velikost v každém rozměru. Tyto velikosti se násobí. A co když se někdo pokusí otevřít soubor s řetězcem 2000 znaků? Nemáš šanci. Délka struny je technicky nekonečná. Nemůžeš to předvídat.
To je důvod, proč existují ukazatele.
Jak ukazatele řeší problém neefektivního využití paměti
Ukazatele umožňují vytvářet dynamické datové struktury. Místo toho, abyste předem rezervovali statický prostor, přidělujete paměť z haldy za běhu programu.
Spotřebujete přesně tolik paměti, kolik dokument potřebuje. Žádný odpad. Když zavřete soubor, vrátíte tuto paměť do haldy. Ostatní části programu jej mohou používat. Paměť je znovu použita.
Nejde jen o úsporu místa. Jde o flexibilitu. Maximální délku řádku nemusíte hádat. Uvolníte to, co potřebujete, když to potřebujete.
Pokud stále přemýšlíte, co to vlastně bajt je nebo jak se „mega“ a „giga“ promítají do skutečných limitů, přečtěte si bity a bajty. Pak se vraťte. Musíte pochopit hardwarová omezení, abyste pochopili, proč zde statická pole nefungují.



























