2017-08-15 2 views
0

Existe-t-il des langages de programmation qui utilisent la récupération de place, mais qui permettent également la gestion manuelle de la mémoire? Ainsi, par exemple, fournir une fonction de destructeur. Est-il même possible pour un langage de programmation d'avoir la garbage collection et la gestion manuelle de la mémoire en même temps?Un langage de programmation avec garbage collection AND gestion manuelle de la mémoire

connexes SO question ici, mais pas de réponse: Interpreted languages with manual memory management?

Merci

+1

Oui. C et C++. [Boehm-GC] (http://www.hboehm.info/gc/). –

+0

Merci Elliott. Un objet qui a été créé en utilisant 'GC_MALLOC()' peut-il être détruit en utilisant 'delete'? – mils

+0

Ada ............. – user3344003

Répondre

1

Il est certainement possible, mais il faut la langue pour appuyer l'allocation d'objets (en supposant qu'il est un langage OO, ce qui rend certainement la vie plus facile) à partir de deux (ou plusieurs) zones de mémoire.

La spécification en temps réel pour Java (RTSJ) est un exemple de plateforme qui prend en charge cette fonctionnalité. Puisque le fonctionnement en temps réel peut facilement être perturbé par un GC non-déterministe, RTSJ ajoute des zones de mémoire en dehors du tas Java standard qui peuvent être utilisées par le code de l'application. RTSJ utilise le concept d'une zone de mémoire, dont il existe trois: HeapMemory, ScopedMemory et ImmortalMemory. ScopedMemory permet à une région de mémoire d'être utilisée par un thread spécifique. Lorsque le thread se termine, la zone de mémoire est automatiquement libérée. Cela suppose que le développeur fasse attention de ne pas partager les références à cette zone en dehors du thread. ImmortalMemory est une région de mémoire qui ne sera jamais collectée. Une fois les objets alloués dans cette région, il n'est pas possible de récupérer l'espace (il n'y a pas d'appel free()).

Je ne suis pas d'accord avec le commentaire que C et C++ sont des langages qui correspondent à votre description. Ni l'un ni l'autre ne s'exécute dans un environnement géré, donc aucun d'entre eux n'a une forme de GC simultané.