<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 class="h5">
    <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 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>

<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>