2008-10-06 7 views
11

J'aurais pensé qu'il serait clair si l'allocation de mémoire est plus rapide dans le code managé que dans le code natif - but there seems to be some controversy. Peut-être que la gestion de la mémoire sous une machine virtuelle est plus rapide parce qu'il n'y a pas d'appels au système, mais je vois que la VM doit elle-même faire des appels périodiques au système pour plus de mémoire et la mémoire elle-même plutôt que l'OS.La gestion de la mémoire .NET est-elle plus rapide dans le code managé que dans le code natif?

Plutôt que de faire des affirmations non fondées comme je l'ai, veuillez fournir des liens vers des références qui soutiennent votre position.

Répondre

6

Prenez une lecture de http://msdn.microsoft.com/en-us/library/ms973852.aspx

Il va dans quelques détails sur la façon dont l'allocation mémoire dans .NET et le compare brièvement au modèle C++. En résumé, l'allocation de mémoire dans .NET consiste à saisir le point de pile actuel en tant qu'adresse de l'objet et à ajouter la taille de données de l'objet au pointeur de la pile. C++ par comparaison doit rechercher dans une liste de pointeurs libérés pour une zone du tas assez grande pour l'objet. Dans la plupart des cas, .NET sera plus rapide.

+0

Cela ne mènerait-il pas à une pile sans cesse croissante? Et la fragmentation de la pile? – Josh

+0

Josh, c'est là qu'intervient le garbage collection. Il supprime les objets dé-référencés du tas, puis déplace tous les objets restants pour en faire un bloc contigu de mémoire utilisée, puis met à jour toutes les références affectées avec les nouvelles valeurs de pointeur. –

+0

L'allocation de mémoire est donc rapide dans le code managé, mais la lenteur des événements de garbage collection occasionnels est le compromis. –

Questions connexes