Re: Formátovaný tisk bylo Re: sprintf - co delam blbe?
Miroslav Mraz
mrazik na volny.cz
Středa Duben 17 12:13:41 CEST 2024
To je jedna z mnoha pastí C++, která může sklapnout hlavně v bare-metal.
Arduino nepoužívám, takže mi také není jasné jak to přesně funguje, ale
patrně proběhne nějaká implicitní konverze buf[11] na String.
A to je ta past. Pomocí zásobníku se přenášejí poměrně velké objekty ale
není to moc vidět. Ještě horší je to přetížených binárních operátorů
(+-*/), kde opravdu musíte vracet celý objekt, odkaz nestačí. U malých
objektů typu int to nevadí, přenášejí se v registru, ale pokud to děláte
nad vektory, maticemi a podobnými strukturami, pak vám nevinný vzoreček
v = a + b*c může vyčerpat celý zásobník.
Zase na druhou stranu v C++ můžete mít datové struktury takřka všechny
jen na zásobníku, nemusí být nutně statické. Překladač si s tím poradí a
v systému, který používá data cache to může být i výhodnější. Opticky to
vypadá jako byste paměť RAM vůbec nepoužívali, ale je to jen zdání, je
to prostě na zásobníku.
Jde to sice takhle dělat i v čistém C, ale není to zvykem.
Mrazík
On 16. 04. 24 23:36, Jan Waclawek wrote:
> ...
>
> Nepouzivam C++. V C by to fungovalo len nahodou kvoli lokalnemu buffru.
>
> Miestni C++ guruovia prosim vysvetlite ako to instancovanie/deinstancovanie
> objektu triedy String tu funguje.
>
> wek
Další informace o konferenci Hw-list