<div dir="ltr">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.<div>
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:)</div><div>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...</div>
<div>Marek</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-07-08 20:49 GMT+02:00 Jaroslav Buchta <span dir="ltr"><<a href="mailto:jaroslav.buchta@hascomp.cz" target="_blank">jaroslav.buchta@hascomp.cz</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<div>Zajimave, az budu mit na dovolene
chvili volna, tak to zkusim nastudovat, kdyz uz to pouzivam... ;-)<br>
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.<br>
Ted jeste aby nekdo udelal funkcni implementaci na nejaky ten
Cortex ;-) (vim ze existuje na M4 ale nebylo to popisovano jako
moc pouzitelne...)<br>
<br>
<br>
Dne 8. 7. 2014 19:11, Marek Sembol napsal(a):<br>
</div><div><div class="h5">
<blockquote type="cite">
<div dir="ltr">Funguje to automaticky. O uvolnovani "managed"
objektu se stara Garbage Collector. Pokusim se ho (velmi
zkratkovite a zjednodusene popsat):
<div>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.</div>
<div>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.</div>
<div>Cele je to jeste zeslozitene finalizery a rozdelenim pameti
do 3 urovni (ty 3 urovne jsou pouze optimalizacni krok) a
dalsimi "drobnostmi".</div>
<div>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.</div>
<div><br>
</div>
<div>Sorry, je to popsano trosku zmatene, ja bych nebyl dobry
prednasejici:-D</div>
<div>Marek</div>
</div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">2014-07-08 16:55 GMT+02:00 Jaroslav
Buchta <span dir="ltr"><<a href="mailto:jaroslav.buchta@hascomp.cz" target="_blank">jaroslav.buchta@hascomp.cz</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<div>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.<br>
Dokonce neni vetsi problem vlozit control v C# do MFC
okna.<br>
<br>
Jen otazka, kdyz napisu napr.<br>
<br>
System::String^ s = gcnew System::String("xxxx");<br>
<br>
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.<br>
<br>
<br>
Dne 23. 6. 2014 20:46, Marek Sembol napsal(a):<br>
</div>
<div>
<div>
<blockquote type="cite">
<div dir="ltr">je to schudna cesta, taky to tak
delam.
<div>Marek</div>
</div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">2014-06-23 20:11
GMT+02:00 Jaroslav Buchta <span dir="ltr"><<a href="mailto:jaroslav.buchta@hascomp.cz" target="_blank">jaroslav.buchta@hascomp.cz</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Potrebuju slozitejsi
datovou strukturu prenest z aplikace C++ (MFC)
do C# (hlavne pole s promennou delkou)<br>
Co tak hledam informace, je hodne reseny
princip marshalingu z C++ do C#<br>
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#<br>
Neco mi uniklo nebo je to schudna cesta?<br>
<br>
---<br>
This email is free from viruses and malware
because avast! Antivirus protection is active.<br>
<a href="http://www.avast.com" target="_blank">http://www.avast.com</a><br>
<br>
_______________________________________________<br>
HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
</blockquote>
</div>
<br>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<br>
<br>
<br>
</div>
</div>
<hr style="border:none;color:#909090;background-color:#b0b0b0;min-height:1px;width:99%">
<table style="border-collapse:collapse;border:none">
<tbody>
<tr>
<td style="border:none;padding:0px 15px 0px 8px"> <a href="http://www.avast.com/" target="_blank"> <img src="http://static.avast.com/emails/avast-mail-stamp.png" border="0"> </a> </td>
<td>
<p style="color:#3d4d5a;font-family:"Calibri","Verdana","Arial","Helvetica";font-size:12pt">
This email is free from viruses and malware
because <a href="http://www.avast.com/" target="_blank">avast!
Antivirus</a> protection is active. </p>
</td>
</tr>
</tbody>
</table>
<br>
</div>
<br>
_______________________________________________<br>
HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<br>
</blockquote>
</div>
<br>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<br>
<br><br>
<hr style="border:none;color:#909090;background-color:#b0b0b0;min-height:1px;width:99%">
<table style="border-collapse:collapse;border:none">
<tbody><tr>
<td style="border:none;padding:0px 15px 0px 8px">
<a href="http://www.avast.com/" target="_blank">
<img border="0" src="http://static.avast.com/emails/avast-mail-stamp.png">
</a>
</td>
<td>
<p style="color:#3d4d5a;font-family:"Calibri","Verdana","Arial","Helvetica";font-size:12pt">
This email is free from viruses and malware because <a href="http://www.avast.com/" target="_blank">avast! Antivirus</a> protection is active.
</p>
</td>
</tr>
</tbody></table>
<br>
</div></div></div>
<br>_______________________________________________<br>
HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<br></blockquote></div><br></div>