Hlavní navigace

Názor k článku Go: minimalistický a překvapivě výkonný programovací jazyk od JSH - Alokace paměti tímhle způsobem takřka neselhává. Když dochází...

Článek je starý, nové názory již nelze přidávat.

  • 25. 11. 2018 10:27

    JSH (neregistrovaný) ---.cust.nbox.cz

    Alokace paměti tímhle způsobem takřka neselhává. Když dochází paměť, tak se dějou zajímavější věci. Na Windowsech se program obvykle uswapuje k smrti. Začne swapovat tak divoce, že vlastně prakticky zamrzne. Na Linuxu se to liší podle nastavení. Asi nejlepší je, když swapper náhodně vybere obětní proces a ten sejme. S overcommitem je taky sranda. Malloc alokuje virtuální adresový prostor bez fyzické paměti. Fyzické stránky se přidělují až při prvním přístupu. Takže to pak vypadá tak, že žádná výjimka nevyletí a program segfaultuje při přístupu do úspěšně alokované paměti. Řeknu na rovinu, že v posledních +-10 letech jsem bad_alloc nepotkal. Ale je možné, že některé jazyky tohle chování OS maskují a chovají se kultivovaněji.

    > Závěr - předpokládej, že to může vylítnout kdekoli a podle toho piš kód.
    Pokud to opravdu může vylítnout kdekoliv, tak se s tím nedá nic dělat. Leda tak doufat, že se to nestane a po chycení výjimky všechno zahodit a začít znova. Pro psaní exception-safe kódu je kritické mít místa, kde to vylítnout nemůže. Klasický obrat je vytvoření nových dat kde to může lítat + výměna původních dat kde to vylítnout nesmí. Pokud to může vyletět opravdu kdekoliv, pak se konzistence zaručit skoro nedá.