es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , ,

Answer

  1. Avatar for 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.

Comments are closed.