Transfer dat C++->C#
Marek Sembol
hwm.land na gmail.com
Úterý Červenec 8 21:34:27 CEST 2014
Pocitani odkazu bylo pouzito napr. u COM objektu. Ale to trpi svymi
problemy. Napr. 2 COM objekty odkazujici na sebe navzajem... a uz se to
neuvolni. K tomu radosti s algoritmy pro alokaci/uvolnovani pameti,
fragmentace pameti... "Neukazneny" kod, ktery nedekrementuje pocitadlo.
U GC je implementace nejjednoduzsi jakou si jde predstavit - mam ukazatel
na prvni volny byt, tak to je ukazatel na muj objekt a ja proste posunu
ukazatel o velikost objektu. Tadaaa, hotovo:)
Jinak s tou implementaci pro cortex... nevidim duvod, proc ne. Kdyz uz byla
implementace pro LPC2388... Jasne, oklestena, ale pouzitelna. Ostatne
implementaci .NET micro framework je cela rada...
Marek
2014-07-08 20:49 GMT+02:00 Jaroslav Buchta <jaroslav.buchta na hascomp.cz>:
> Zajimave, az budu mit na dovolene chvili volna, tak to zkusim
> nastudovat, kdyz uz to pouzivam... ;-)
> Ja mel za to, ze se u kazdeho objektu pocita kolikrat je nekam prirazen (a
> pri zmene odkazu zase puvodni odecita) a po dosazeni nuly uvolni... Prislo
> by me to efektivnejsi ale chapu, ze je to asi vymysleno dobre popsanym
> zpusobem.
> Ted jeste aby nekdo udelal funkcni implementaci na nejaky ten Cortex ;-)
> (vim ze existuje na M4 ale nebylo to popisovano jako moc pouzitelne...)
>
>
> Dne 8. 7. 2014 19:11, Marek Sembol napsal(a):
>
> Funguje to automaticky. O uvolnovani "managed" objektu se stara Garbage
> Collector. Pokusim se ho (velmi zkratkovite a zjednodusene popsat):
> Pri kazde alokaci framework zkontroluje "kolik je uz alokovano pameti".
> Pokud se rozhodne, ze uz je pameti alokovano hodne, tak se spusti GC.
> Prakticky se program zastavi, vsechny objekty jsou oznaceny jako
> "neplatne". Pak se postupuje od tzv. "root'u (lokalni promenne na stacku,
> staticke objekty, ...) a ty se oznaci jako platne. Pak se pro kazdy z
> techto objektu oznaci jako platne vsechny objekty, na ktere ukazuje. (a pak
> to postupuje rekurzivne dal - proste pro kazdy "platny" objekt se oznaci za
> platne i jim odkazovane. Kdyz je hotovo, tak veskere objekty, ktere nebyly
> oznacene jako "platne" je mozno vyhodit. (cele to zeslozituji jeste tzv.
> finalizery - ale temi to nebudu ted koplikovat. Finalizery jsou neco jako
> "destruktor" v C++ a jsou volany automaticky prave GC - ale jak rikam, ty
> ted nebudu resit. No a pak prichazi jeste faze "setrepani" adresniho
> prostoru. Objekty se v pameti posunou aby se vytesnila "uvolnena mista" a
> tim padem aby byl vyuzi souvisly blok pameti bez der (neni tedy problem s
> fragmentaci pameti). Behem posouvani objektu v pameti jsou samozrejme
> prepsany vzdy vsechny odkazy na dany objekt.
> Z vyse uvedeneho vyplyva, proc v .NET neni neco jako ukazatel na void,
> union, pretypovani ukazatele na typ jiny, nez typ predka - to vse by
> znemoznilo prave to "nastav jako platne vsechny objekty, na ktere platny
> objekt odkazuje" a i to "posouvani" objektu po pameti.
> Cele je to jeste zeslozitene finalizery a rozdelenim pameti do 3 urovni
> (ty 3 urovne jsou pouze optimalizacni krok) a dalsimi "drobnostmi".
> Z predchoziho je jasne, ze pamet, ktera je predavana do unmanaged C++ musi
> byt "zafixovana", .NET totiz (samo) nic nevi o tom, co se deje v unmanaged
> kodu a nemuze teda tu pamet preadresovat a tak.
>
> Sorry, je to popsano trosku zmatene, ja bych nebyl dobry prednasejici:-D
> Marek
>
>
> 2014-07-08 16:55 GMT+02:00 Jaroslav Buchta <jaroslav.buchta na hascomp.cz>:
>
>> Je to IMHO opravdu dost dobra cesta a az me prekvapuje, jak C++ a .NET
>> dobre spolupracuje, jeste asi nemam vsechno vychytane, ale vsechna
>> rozsireni stavajicich programu uz budu delat v C#, je to velmi komfortni
>> proti MFC.
>> Dokonce neni vetsi problem vlozit control v C# do MFC okna.
>>
>> Jen otazka, kdyz napisu napr.
>>
>> System::String^ s = gcnew System::String("xxxx");
>>
>> Tak je pamet automaticky uvolnena pri zaniku promenne s nebo po prirazeni
>> s = null, nebo je to potreba v C++ nejak osetrit? Pripada mi to az moc
>> slozite na realizaci. Ale zatim doufam, ze to automaticky funguje.
>>
>>
>> Dne 23. 6. 2014 20:46, Marek Sembol napsal(a):
>>
>> je to schudna cesta, taky to tak delam.
>> Marek
>>
>>
>> 2014-06-23 20:11 GMT+02:00 Jaroslav Buchta <jaroslav.buchta na hascomp.cz>:
>>
>>> Potrebuju slozitejsi datovou strukturu prenest z aplikace C++ (MFC) do
>>> C# (hlavne pole s promennou delkou)
>>> Co tak hledam informace, je hodne reseny princip marshalingu z C++ do C#
>>> Me ale prijde, ze bude lepsi vytvorit primo v C++ mnou definovany
>>> managed class pomoci gcnew a pouzit primo objekty .net jako List string atp
>>> primo z C# a pak tento class predat metode do C#
>>> Neco mi uniklo nebo je to schudna cesta?
>>>
>>> ---
>>> This email is free from viruses and malware because avast! Antivirus
>>> protection is active.
>>> http://www.avast.com
>>>
>>> _______________________________________________
>>> 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.czHw-list na list.hw.czhttp://list.hw.cz/mailman/listinfo/hw-list
>>
>>
>>
>>
>> ------------------------------
>> <http://www.avast.com/>
>>
>> This email is free from viruses and malware because avast! Antivirus
>> <http://www.avast.com/> protection is active.
>>
>>
>> _______________________________________________
>> 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.czHw-list na list.hw.czhttp://list.hw.cz/mailman/listinfo/hw-list
>
>
>
>
> ------------------------------
> <http://www.avast.com/>
>
> This email is free from viruses and malware because avast! Antivirus
> <http://www.avast.com/> protection is active.
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20140708/14190395/attachment.html>
Další informace o konferenci Hw-list