Pregunta

Soy estudiante y quiero saber más sobre la gestión de la memoria de la dinámica. Para C ++, llamar al operador nuevo () puede asignar un bloque de memoria debajo del montón (tienda gratuito). De hecho, no tengo una imagen completa sobre cómo lograrlo.

Hay algunas preguntas: 1) ¿Cuál es el mecanismo de que el sistema operativo puede asignar un bloque de memoria? Como sé, hay algunos esquemas básicos de asignación de memoria como el primer ajuste, el mejor ajuste y el peor de ajuste. ¿El sistema operativo usa uno de ellos para asignar la memoria dinámicamente debajo del montón?

2) Para una plataforma diferente como Android, iOS, ventana, etc., ¿se utilizan diferentes algoritmos de asignación de memoria para asignar un bloque de memoria?

3) Para C ++, cuando llamo al operador nuevo () o malloc (), ¿el asignador de memoria asigna un bloque de memoria al azar en el montón?

Espero que alguien pueda ayudarme.

Gracias

¿Fue útil?

Solución

malloc no es una llamada del sistema, es biblioteca (libc) rutina que pasa por algunas de sus estructuras internas para brindarle una dirección de memoria gratuita del tamaño requerido. Solo se llama un sistema si el segmento de datos del proceso (es decir, la memoria virtual que puede usar) no es "lo suficientemente grande" de acuerdo con la lógica de malloc en cuestión. (En Linux, la llamada del sistema para ampliar el segmento de datos es brk)

Dicho simplemente, malloc Proporciona una gestión de memoria de grano fino, mientras que el sistema operativo administra grandes y grandes trozos de memoria disponibles para ese proceso.

No solo plataformas diferentes, sino también diferentes bibliotecas usan diferentes malloc; algunos programas (por ejemplo python) Use su asignador interno en su lugar, ya que conocen sus propios patrones de uso y pueden aumentar el rendimiento de esa manera.

Hay un artículo largo sobre Malloc en Wikipedia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top