Odpovídáte na názor ke článku The Tale of Two (.NET) Heaps.
„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.
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 37 774×
Přečteno 26 420×
Přečteno 24 932×
Přečteno 21 278×
Přečteno 18 932×