Odpověď na názor

Odpovídáte na názor ke článku The Tale of Two (.NET) Heaps.

  • 9. 11. 2011 14:49

    Miloslav Ponkrác (neregistrovaný)

    „Pochopil jsem to tak, že tam tvrdí, že jim vznikají díry ve VM (na heapu). A že šoupat daty je drahá záležitost.“

    Jenomže šoupání daty potřebuje taky, abyste jim nešoupal s adresami pointerů jen tak mýrnix týrnix. Nemůžete prostě jen tak přesunout data na jinou adresu, i kdyby to hypoteticky šlo pomocí změny stránkovacích registrů, protože celý program může obsahovat odkazy na adresu, kterou mu změníte.

    Změna a setřesení heapu (třeba i pomocí změny adresy stránek, připusťme to hypoteticky) musí nutně obsahovat opravy pointerů s adresami po celém programu.

    Což občas virtuální mašiny Javy, nebo .NETu dělají. Takže tak jako tak musí obsah dat být prozkoumán a musí být jasno co je co. Nejde tedy při přesouvání bloků dat na heapu o prosté kopírování, ale také o analýzu dat samotných a opravy změněných adres pointerů, které budou sestřesením heapu změněny.

    Data nejsou v programu samoúčelně, obsahují něco co program potřebuje. Neleží to tam jen tak ladem, a program samozřejmě na data odkazuje pointery, tedy adresami. Změnou adres heapu musíte opravit všechny pointery v programu, jinak jste program rozmetali atomovkou na cimpr camprt a zhroutí se.