Odpověď na názor

Odpovídáte na názor ke článku Skrytá úskalí vícenásobné dědičnosti v C++.

  • 9. 5. 2012 22:15

    Ondřej Novák (neregistrovaný)

    Ne opravdu, zrovna ten příklad není žádná nuance ale definice. Je je potřeba v tom C++ vidět tenké rozhraní mezi vyšším programovacím jazykem a strojovým kódem. Zatímco interpretované a bajtcodové jazyky mají mezi vlastní myšlenkou programátora a cílovým kódem procesoru "tuny balastu", které zajišťuje absolutní oddělenost implementačních detailů od vlastního programování, C++ od začátku jde tou cestou, kdy si na nic nehraje, a umožňuje programátorovi brát na vědomí i technické detaily. Což činí jazyk velice mocným, ale pro někoho zřejmě nepřehledným.

    K tomu prvnímu příkladu: http://codepad.org/mUADjrZ1

    Jde o to, že prázdná třída zabírá v paměti 1 bajt, pokud je použita jako proměnná... to stanoví norma. Na strojích se zarovnáním na 4 adresy pak zabírá 1 bajt + 3 nevyužité adresy pro zarovnání. Zarovnává se kvůli další proměnné, která má 4 bajty. Dohromady má třída B celých 8 bajtů. Pokud ale prázdnou třídu pouze podědíme, norma stanoví, že prázdná třída může zabírat 0 bajtů (říká se tomu "Empty base-class optimization") Potom už není proč zarovnávat a v třídě zůstává jen 4 bajtová proměnná, proto C zabírá jen 4 bajty.

    Celý vtip je v tom, že mnoho programátorů tohle řešit nebude. Máme stroje o gigabajtech, programy jsou plné nevyužitého prostoru, neoptimalizujeme, data ukládáme bez nějakých kompresí. Nějaký 4 nebo 8 bajtů nás nemusí rozhodit. Taky ten příklad s těmi hromadami dědění je extrémní, měl jen demonstrovat a dokazovat mé zjištění. Já jsem totiž náročný a nespokojím se s tím, že něco nějak funguje a je mi jedno jak. Programuju jak pro X GB stroje, tak pro atmely, kde je k dispozici 1KB paměti a kde člověk počítá každý bajt (přesto se tam programuje v C++). A o svá zjištění jsem se chtěl podělit.

    Neřešte to, nenechte se odradit. Většinou jsou to prkotiny.