J'ai entendu que Python a automatisé "garbage collection", mais pas C++. Qu'est-ce que ça veut dire?J'ai entendu que Python a automatisé "garbage collection", mais pas C++. Qu'est-ce que ça veut dire?
J'ai entendu que Python a automatisé "garbage collection", mais pas C++. Qu'est-ce que ça veut dire?
Répondre
Cela signifie que l'utilisateur python n'a pas besoin de nettoyer ses objets dynamiques créés, comme vous êtes obligé de le faire en C/C++.
Exemple en C++:
char *ch = new char[100];
ch[0]='a';
ch[1]='b';
//....
// somewhere else in your program you need to release the alocated memory.
delete [] ch;
// use *delete ch;* if you've initialized *ch with new char;
en python:
def fun():
a=[1, 2] #dynamic allocation
a.append(3)
return a[0]
python prend soin de "un" objet en lui-même.
Essayez reading dessus.
Cela signifie essentiellement la façon dont ils gèrent les ressources mémoire. Lorsque vous avez besoin de mémoire, vous le demandez généralement au système d'exploitation, puis vous le retournez. Avec python vous n'avez pas besoin de vous soucier de le retourner, avec C++ vous devez suivre ce que vous avez demandé et le retourner, l'un est plus facile, l'autre performant, vous choisissez votre outil.
de Wikipédia http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29:
...
Collecte des ordures ménagères libère le programmeur de traiter manuellement avec l'allocation de mémoire et désallocation. En conséquence, certaines catégories de bogues sont éliminés ou considérablement réduits:
bugs pointeur ballants, qui se produisent lorsqu'un morceau de la mémoire est libérée tandis que il y a des pointeurs encore il, et l'un des ces pointeurs sont utilisés.
insectes gratuits doubles qui se produisent lorsque le programme tente de libérer un
région de mémoire qui est déjà
libre.Certains types de fuites de mémoire, dans lequel un programme parvient pas à libérer
mémoire qui n'est plus référencé
par une variable, ce qui, au fil du temps, à l'épuisement de la mémoire.
...
Les principes de base de la collecte des ordures sont:
- objets de données Rechercher dans un programme qui ne peut être consulté à l'avenir
- Reclaim les ressources utilisées par ces objets
D'autres ont déjà répondu à la question principale, mais je voudrais ajouter que la collecte des ordures est possible dans C++. Ce n'est pas aussi automatique que celui de Python, mais c'est faisable.
pointeurs intelligents sont probablement la forme la plus simple de collecte des ordures C - std::auto_ptr
, boost::scoped_ptr
, boost::scoped_array
qui libèrent la mémoire après avoir été détruit. Il y a un exemple dans l'une des réponses précédentes, qui pourrait être réécrite comme:
boost::scoped_array<char> ch(new char[100]);
ch[0] = 'a';
ch[1] = 'b';
// ...
// boost::scoped_array will be destroyed when out of scope, or during unwind
// (i.e. when exception is thrown), releasing the array's memory
Il y a aussi boost::shared_ptr
, boost::shared_array
qui mettent en œuvre le comptage de référence (comme Python). Et il existe des récupérateurs d'ordures à part entière qui sont destinés à remplacer les allocateurs de mémoire standard, par ex. Boehm gc.
Comme vous avez votre réponse, maintenant il est préférable de connaître les inconvénients de la collecte automatisée des ordures: il nécessite de grandes quantités de mémoire supplémentaire et ne convient pas pour les applications difficiles en temps réel en temps réel.
Python est connu pour son traitement backend si ...? – TIMEX
- 1. MySQL 1443: qu'est-ce que ça veut dire?
- 2. Garbage Collection en C++/CLI
- 3. Garbage Collection
- 4. Loops and Garbage Collection
- 5. Garbage garbage collection de code généré à l'exécution
- 6. et fichier temporaire Garbage Collection
- 7. Force Garbage Collection dans AS3?
- 8. Crash Collection Garbage utilisant NSImage
- 9. Ne veut pas que le formulaire soit réduit
- 10. Garbage collection de membres statiques
- 11. Problème de modèle MVC pouvez-vous diagnostiquer ce que cela veut dire?
- 12. Est-ce que iPhone OS 3.0 a un vrai garbage collector?
- 13. Qu'est-ce que l'allocation de matrice de taille nulle fait/veut dire?
- 14. Fantastico pas assez automatisé
- 15. Serait-ce causer des problèmes Garbage Collection
- 16. Est-ce que extern "C" a un effet sur C?
- 17. Qui utilise BlogEngine.Net pour son blog? Est-ce que ça marche bien? Est-ce que ça va évoluer? : P
- 18. Interprète Python en tant que classe C++
- 19. Je pensais que le tas géré a augmenté dynamiquement?
- 20. Que signifie CMS par rapport au Garbage Collector de Java?
- 21. RedirectToAction - mais je veux que ça se passe sur http://example.com/controller/action/id?
- 22. Commande shell python - pourquoi ça ne marchera pas?
- 23. Quelqu'un peut-il me dire comment ça marche.com?
- 24. « mouseDragged » mais NSOpenGlView pas rafraîchi jusqu'à ce que « MouseUp »
- 25. Est-ce que python a une fonction "causes_exception()"?
- 26. L'objet SQL Server DTS Connection2 a une propriété non documentée, UseDSL. Qu'est ce que ça fait?
- 27. Est-ce que Python a un équivalent à 'switch'?
- 28. Est-ce que python a un call_user_func() comme PHP?
- 29. python, comment dire quel type de obj a été retourné
- 30. Est-ce que Haskell a des variables?
duh. delete [] ch; – StampedeXV
revérifié, merci. – bua
Bien que, si vous utilisez 'delete' (quelle que soit la saveur) vous faites C, pas C++ ... –