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