Re: Formátovaný tisk bylo Re: sprintf - co delam blbe?

Jan Waclawek konfera na efton.sk
Středa Duben 17 12:29:06 CEST 2024


>Arduino nepouµívám, takµe mi také není jasné jak to přesně funguje, ale 

No ved je k dispozicii kompletna dokuemntacia.. ;-)
https://github.com/arduino/ArduinoCore-API/blob/master/api/String.h
https://github.com/arduino/ArduinoCore-API/blob/master/api/String.cpp

Ale bez ohladu na to, kedze C++ nepouzivam a nepoznam, tak mi nie je jasne,
ako a kedy sa ten anonymny objekt, ktory je nasledkom pouzitia triedy ako
navratoveho typu, instancuje; resp. co je na zasobniku v akom poradi a
akym sposobom a v ktorom okamihu sa tam ten buffer prenesie.

Zaujima ma to preto, lebo toto je dost casty problem, kde by som chcel, aby
nejaku pamat alokovala "leaf" funkcia a aby sa po jej "pouziti"
automaticky ta pamat dealokovala. Tak ma zaujima, ako to ten C++ skutocne
robi. 

>Jde to sice takhle dělat i v čistém C, ale není to zvykem.

Neviem, ako by som v cistom C zabezpecil zivotnost toho buffra dlhsie ako
je koniec funkcie, v ktorom bol definovany, a ako by som zabezpecil, aby
po pouziti bol ten buffer "dealokovany". V asm si viem predstavit, ze by
som pri navrate z tej funkcie preusporiadal zasobnik, ale pripada mi to
dost brutalne.

wek



----- Original Message ---------------

Subject: Re: Formátovaný tisk bylo Re: sprintf - co delam blbe?
   From: Miroslav Mraz <mrazik na volny.cz>
   Date: Wed, 17 Apr 2024 12:13:41 +0200
     To: hw-list na list.hw.cz

>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