Transfer dat C++->C#

Marek Sembol hwm.land na gmail.com
Úterý Červenec 8 19:11:29 CEST 2014


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
>
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20140708/4b470fb4/attachment.html>


Další informace o konferenci Hw-list