2008-10-06 19 views
11

Hubiera pensado que sería claro si la asignación de memoria es más rápida en el código administrado que en el código nativo - but there seems to be some controversy. Quizás la administración de memoria en una máquina virtual sea más rápida porque no hay llamadas de intercambio de contexto al sistema operativo, pero luego veo que la máquina virtual necesitaría realizar llamadas periódicas al sistema operativo para obtener más memoria, y tiene la administración sobrecargando la memoria misma en lugar del sistema operativo.¿La gestión de memoria .NET es más rápida en código administrado que en código nativo?

En lugar de hacer afirmaciones sin fundamento como las que tengo, proporcione enlaces a las referencias que respaldan su posición.

Respuesta

6

Tome una lectura de http://msdn.microsoft.com/en-us/library/ms973852.aspx

Se entra en algunos detalles sobre cómo funciona la asignación de memoria en .NET y lo compara brevemente con el modelo C++.

En resumen, la asignación de memoria en .NET implica tomar el punto de pila actual como la dirección del objeto y agregar el tamaño de datos del objeto al puntero de pila. C++ en comparación tiene que buscar a través de una lista de punteros liberados para un área del montón lo suficientemente grande para el objeto. En la mayoría de los casos, por lo tanto, .NET será más rápido.

+0

¿Eso no llevaría a una pila en constante crecimiento? Y la fragmentación de la pila? – Josh

+0

Josh, ahí es donde entra la recolección de basura. Elimina los objetos sin referencia del montón, luego mueve todos los objetos restantes para convertirlo en un bloque contiguo de memoria usada una vez más, luego actualiza todas las referencias afectadas con los nuevos valores del puntero. –

+0

Así que la asignación de memoria es rápida en el código administrado, pero la lentitud de los eventos ocasionales de recolección de basura es la compensación. –

Cuestiones relacionadas