Transfer dat C++->C#

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Úterý Červenec 8 20:49:09 CEST 2014


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 
> <mailto: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 <mailto: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
>>         <http://www.HW.cz>
>>         Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>>         http://list.hw.cz/mailman/listinfo/hw-list
>>
>>
>>
>>
>>     _______________________________________________
>>     HW-list mailing list  -  sponsored bywww.HW.cz  <http://www.HW.cz>
>>     Hw-list na list.hw.cz  <mailto:Hw-list na list.hw.cz>
>>     http://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 <http://www.HW.cz>
>     Hw-list na list.hw.cz <mailto: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



---
This email is free from viruses and malware because avast! Antivirus protection is active.
http://www.avast.com
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20140708/64846dfd/attachment.html>


Další informace o konferenci Hw-list