Vlákno názorů k článku Senzory Martina Malého: Pokud chcete být špičkový programátor… od JD - Potiz s dynamickou alokaci neni v rezii spotreby...

  • Článek je starý, nové názory již nelze přidávat.
  • 11. 2. 2016 10:06

    JD (neregistrovaný)

    Potiz s dynamickou alokaci neni v rezii spotreby pameti. Daleko vetsi problem je nekonstantni cas nutny na alokaci a fragmentace pameti pri alokovani/uvol­novani objektu ruzne velikosti. Jakmile dojde na hard-real-time nebo systemy se zarucenou bezpecnosti podle ISO61508 (a dovozenych) pak teprve nastane peklo a dymamicka alokace new/malloc je v podstate vyloucena. Pouzivaji se jine techniky napriklad alokacni pool fragmentu pevne velikosti a podobne. I kdyz rezii pocitano spotrebou pameti pameti to ma nekdy i vetsi, ale pamet se prikoupit/zaplatit da, cas je neuprosny.

  • 10. 2. 2016 11:37

    Ondřej Novák

    Nevím, občas programuju pro Arduino, mám tam asi 16kB flash, a 1kB RAM. Jsou to trochu spartanské podmínky, ale krásný kód se tam dá psát taky. Používám celou plejádu vyjadřovacích prostředků, od objektů, virtuální metod, virtuálního dědění až po šablony. Jediný co na Arduinu nefunguje jsou výjimky (škoda).

    Co se paměti týče, je jasné, že dynamické alokace mají režii (mám pocit, že 4 bajty navíc) a jsou pomalejší (no jasně, paměť je spojový seznam, hledá se sekvenčně), ale nemáme přeci jen haldu, máme i zásobník.

    Lze použít i globální proměnné, ale mnohem radši sahám po globálním singletonu a na úrovni volání funkcí si předávám reference na jednotlivé objekty uvnitř. Nic to skoro nestojí, tyhle procesory mají dost registrů. Objektový návrh pořád umožňuje pozdější rozšířitelnost. Mám tam jednu blikající diodu? fajn, co když budu chtít dvě?

    Je třeba mít přehled o tom, co všechno to stojí. R/O struktury se spravidla strkají do ROM. Ale objekt s virtuálními metodami má jeden pointer navíc. Virtuální dědění znamená další pointer za každou virtuální base. S tím se dá žít, když to člověk potřebuje. Nejlepší jsou v tomhle šablony. Ty nemají zpravidla žádné režie na záběr RAM. Ale mohou zabrat více ROM. Nicméně si člověk pak uvědomí, že beztak by to musel implementovat tolikrát, kolikrát to potřebuje. Překladač (GCC) s patřičným přepínačem dokáže využít i společné části kódu šablony, takže nakonec ušetří.

    PS: Tabulkové GOTO? Sorry, já myslel, že se používá switch-case.

Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).