Si no recuerdo mal, en realidad malloc llama a una función específica del sistema operativo
No del todo. La mayoría del hardware tiene un tamaño de página de 4KB. Los sistemas operativos generalmente no exponen una interfaz de asignación de memoria que ofrezca algo más pequeño que los fragmentos de tamaño de página (y alineado con la página).
malloc
pasa la mayor parte de su tiempo a administrar el espacio de memoria virtual que ya ha sido asignado, y sólo de vez en cuando pide más memoria desde el sistema operativo (obviamente esto depende del tamaño de los elementos que asignar y la frecuencia con que free
).
Existe la idea errónea de que cuando se free
algo se devuelve inmediatamente al sistema operativo. Si bien esto ocurre a veces (especialmente en el caso de bloques de memoria más grandes), generalmente la memoria free
d permanece asignada al proceso y luego puede ser reutilizada por malloc
s posteriores.
Por lo tanto, la mayor parte del trabajo consiste en la contabilidad del espacio virtual ya asignado. Las estrategias de asignación pueden tener muchos objetivos, como operación rápida, pérdida de memoria baja, buena localidad, espacio para crecimiento dinámico (por ejemplo, realloc
) y así sucesivamente.
Si conoce más sobre su patrón de asignación y liberación de memoria, puede optimizar malloc
y free
para sus patrones de uso o proporcionar una interfaz más extensa.
Por ejemplo, puede asignar muchos objetos del mismo tamaño, lo que puede cambiar los parámetros de asignación óptimos. O siempre puede liberar grandes cantidades de objetos a la vez, en cuyo caso no desea que free
haga cosas extravagantes.
Eche un vistazo a memory pools y obstacks.
es más probable que estén preasignando un gran bloque de memoria (una "arena de memoria") que evita la fragmentación y permite un mejor rendimiento de asignación – BrokenGlass
Sí, puede solicitar al sistema operativo una gran porción de memoria contigua Milo. Es bastante común en el mundo de los sistemas. –
Sí, lo más probable es que escriban un envoltorio alrededor de malloc que usan en lugar de llamar malloc directamente, lo que aumenta la velocidad en algunos casos, pero no reemplaza las cosas de nivel de sistema operativo –