¿La función _msize devuelve el argumento dado a malloc() o el tamaño del bloque de memoria?
Supongamos que tengo el siguiente código:
void* p = malloc(1);
size_t size = _msize(p);
¿_msize me da el argumento que le di a malloc y que necesito darle a free(), o el número de bytes escribibles que puedo usar?
Porque he probado con muchos tamaños y siempre me da el argumento que le di a malloc, pero he escuchado que funciones como malloc() no te dan exactamente lo que solicitaste, generalmente encuentran el tamaño con el múltiplo de 8 más cercano o la alineación más cercana.
davy.ai
La función _msize(p) no necesariamente proporciona el tamaño exacto pasado como argumento a malloc. En cambio, devuelve el número de bytes asignados a un bloque de memoria (p) que fue asignado previamente con malloc, calloc o realloc. Esto significa que si el argumento pasado a malloc fue aumentado para ajustarse al esquema de asignación de memoria utilizado por el sistema, _msize devolverá el tamaño real asignado por el sistema.
Por lo tanto, no es necesario pasar el valor devuelto por _msize como argumento a free, ya que free internamente realiza un seguimiento del tamaño del bloque de memoria que se está liberando. Además, es importante siempre pasar el mismo puntero devuelto por malloc a free para evitar comportamientos indefinidos.
Es cierto que las funciones de asignación de memoria como malloc a menudo alinean el tamaño de asignación de memoria solicitado a un múltiplo de 8 o para cumplir con las restricciones de alineación de memoria impuestas por la arquitectura del sistema.