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