Dans PostScript, vous avez une VM pour stocker les valeurs des objets composites. Ils peuvent être stockés dans une machine virtuelle locale ou globale en fonction du mode d'allocation de machine virtuelle de l'interpréteur.Mise en œuvre de la gestion de la mémoire PostScript pour le local et le global
Je travaille sur un interpréteur en langage C# (un peu similaire au langage JAVA). Et je n'arrive pas à comprendre comment représenter la VM locale et globale.
Disons que j'ai un objet:
public class StringObj : Composite {
public string Data { get;set; }
}
Les données propriété (valeur de StringObj) est mémorisée dans VM locale ou globale. Mais comment cela pourrait-il être présenté en C# (ou Java).
C# lui-même a déjà la gestion de la mémoire elle-même (stack/heap/...) mais ce sont les internes du langage et de .NET framework, que je ne peux pas contrôler.
Dois-je créer une structure de mémoire? Si oui, comment cela pourrait/pourrait-il être représenté? Ou serait-il autorisé à stocker juste un bool propriété sur chaque objet composite pour savoir si elle est quelque chose de local ou global, comme celui-ci:
public class StringObj : Composite {
public string Data { get;set; }
public bool IsGlobal { get; set; }
}
Mise à jour:
Peut-être que si je sais comment fonctionne l'opérateur "save", je pourrais mieux comprendre comment implémenter la gestion de la mémoire.
Qu'est-ce que l'opérateur "save" sauvegarde exactement?
"crée un instantané de l'état actuel de la mémoire virtuelle"
À la lecture de l'opérateur restauration Je pense qu'il stocke ceci:
- Le mode d'emballage array (d'emballage)
- Mode d'allocation de machine virtuelle (booléen)
- format de sortie d'objet (?)
- paramètre interpréteur utilisateur s (?)
- enregistre une copie de l'état graphique en cours sur l'état graphique pile
Qu'est-ce que sinon il sauver? comme la définition de «l'état actuel de la mémoire virtuelle» n'est pas très bien définie.
Dois-je également vérifier chaque objet sur la pile pour vérifier s'il est composite ou non et enregistrer la valeur de l'objet sur la pile? ou les piles/dictionnaires sont-ils intacts? ou..?
lecture intéressante: http://stackoverflow.com/questions/12778435/why-is-it-called -marshal-allochglobal-if-it-alloue-sur-le-tas-local – juFo
vous devez comprendre le comportement de ces types d'allocation. Ils sont 'type 1' et' type 2'. N'essayez pas de mapper les constructions C# ou java ('global', 'local', 'heap', ....). Pensez simplement, 'j'ai besoin de stocker A de telle sorte que son x, y et z' (a une portée spécifique, durée de vie, taille, ...) – pm100