Precisamente, de acuerdo con la norma, new char[10]
asignará al menos 10 bytes en el montón.
Las partes internas de new
y delete
dependen de la implementación. Por lo tanto, variará de compilador a compilador y de plataforma a plataforma. Además, puede encontrar una variedad de algoritmos de asignación (por ejemplo, TCMalloc).
Le daré una visión general de cómo podría trabajar internamente, pero no lo tome como la verdad absoluta. Está escrito con el único propósito de esta explicación.
En resumen, el operador new
invoca internamente malloc
. El malloc
usa una lista muy larga de bloques de memoria disponibles, también conocido como free chain
. Cuando se invoca malloc
, busca esta lista para el primer bloque que sea lo suficientemente grande como para contener el tamaño solicitado. Después de eso, divide el bloque en dos partes, una con el tamaño que solicitaste y la otra con el resto, que luego se agrega a la cadena libre. Finalmente, devuelve el bloque con el tamaño de la solicitud.
Lo inverso ocurre en una llamada free
, que se invoca mediante eliminar/borrar []. En resumen, devuelve el bloque proporcionado al free chain
.
Podría haber trucos extravagantes durante los procesos que describí arriba, como ordenar el free chain
, redondear el tamaño solicitado a la siguiente potencia de dos para reducir la fragmentación de la memoria, y así sucesivamente.
Puede ser de ayuda: http://stackoverflow.com/questions/2327848/how-does-the-delete-in-c-know-how-many-memory-locations-to-delete – codaddict