malloc/free

Jiří Nesvačil nesvacil na posys.eu
Čtvrtek Listopad 3 10:47:02 CET 2016


LWIP, ale neni zrovna dobry pripad:

http://lwip.wikia.com/wiki/LwIP_and_multithreading

Ani ty rutiny na alokaci nejsou thread safe. Problem, jak pisete je v te synchronizaci ta totiz vyzaduje semafory nebo zamky a tedy reakce na preruseni v realtime aplikaci je ohrozena. Jednodussi je v preruseni plnit nejaky buffer a nastavit semafor. 
Vse ostatni zpracovat ve vlakne.

Netvrdim, ze neexistuje thread safe malloc, ktery nebude vyzadovat zamky, ale jeste jsem ho nevidel, nepsal. Vzdy prinese nejake limity toho algoritmu jako nejaky pool o staticke velikosti, atp. na nejakou slozitost a dokonalost alokace se asi da 
zapomenout.

Jirka

Dne 3. 11. 2016 v 9:45 Jaroslav Buchta napsal(a):
> Pokud to chcete pouzit v preruseni, musite zajistit synchronizaci - nejjednoduseji preruseni blokovat uvnitr techto funkci, std knihovna na to ma vetsinou podporu nebo treba u nano verze musite funkce prekryt pri linkovani
> Pokud to neni nezbytne, vyhnul bych se pouziti u kritickych aplikaci. Nektere knihovny maji svuj propracovany mechanismus pro dyn. alokaci, treba LwIP hned v nekolika verzich, kouknete do zdrojaku pro inspiraci.
>
> Dne 03.11.2016 v 8:16 Jiří Nesvačil napsal(a):
>> Zdravim,
>>
>> jeste nekolik otazek ?
>>
>> 4.  pro MCU a realtime aplikace ? Muze se malloc,calloc pouzit v preruseni ?
>> Odpoved zni ne ?
>>
>> 5. Je vyhodne tedy pouzit heap a proc v realtime mcu ?
>> Odpoved zni ano ?
>>
>> Vysvetleni necham na zamysleni, probuzeni ... .
>>
>> Jinak
>> - pro vetsi cpu existuji veci jako garbadge pro c++, kde se prochazi i pointery v pameti (neprijde mi to idealni)
>> - lua a podobne jazyky implementuji objekt, ktery dale odkazuje do alokace napr. pro string. V c++ si to lze predstavit jako pointer na pointer a pote muze dojit k realokaci i na takto malem cpu
>> - nekdo implementoval i alokaci pro grafickou stranku/widget v malem cpu a dealokace pote probiha cele stranky vcetne tech malych fragmentu pameti
>>
>> Jirka
>>
>> Dne 3. 11. 2016 v 1:28 Pavel Hudecek napsal(a):
>>> Dobrý den všem,
>>>
>>> mějme program v C, běžící v MCU s několika desítkami kB RAM.
>>>
>>> Program čas od času alokuje nějakou paměť a jindy zas odalokuje. Předpokládejme, že se alokují kousky od několika B až do několika kB. Alokace a dealokace se dějí v obecně náhodném pořadí, tedy různé kousky paměti jsou alokovány na různou dobu.
>>>
>>> 1. Může se stát, že se paměť postupně fragmentuje tak, že od jistého okamžiku již nepůjde alokovat nějaké větší kousky, přestože celkové místo by bohatě stačilo?
>>> 2. Pokud se neděje (1), může se stát, že nějaký správce paměti bude v průběhu času již alokované kusy v případě nutnosti přesouvat, takže se budou měnit hodnoty pointerů na ně ukazujících?
>>> 3. Nebo to funguje úplně jinak? :-)
>>>
>>> Díky,
>>> PH
>>> _______________________________________________
>>> HW-list mailing list  -  sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list