2009-10-07 11 views

Répondre

8

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.

+1

duh. delete [] ch; – StampedeXV

+0

revérifié, merci. – bua

+0

Bien que, si vous utilisez 'delete' (quelle que soit la saveur) vous faites C, pas C++ ... –

2

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.

4

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:

  1. objets de données Rechercher dans un programme qui ne peut être consulté à l'avenir
  2. Reclaim les ressources utilisées par ces objets
3

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.

0

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.

+0

Python est connu pour son traitement backend si ...? – TIMEX

Questions connexes