Título: Asignar memoria con malloc() en C Publicado por: nullx100 en 17 Abril 2022, 19:46 pm Hola.
Entiendo que las diferentes variables dependiendo del tipo y desde donde se estén declarando se guardan en un segmento de memoria o en otro. Corregidme si me equivoco [Direcciones más pequeñas] -- .text (Para instrucciones) .data (Para variables globales y estáticas inicializadas) .bss (Para variables globales y estáticas no inicializadas) .heap (Uso libre para el programador. Crece hacia direcciones más altas) .stack (Para guardar el contexto de función, variables locales, parámetros y dirección de retorno para el EIP. Crece en direcciones más pequeñas) -- [Direcciones más altas] He creado el siguiente codigo: Código:
y la salida es la siguiente: Código:
Lo que me extraña es la variable heap_var_ptr, no es raro que este a solo 4 bytes de la de stack_var?? Me da la impresión de que esta variable se está quedando en el segmento de pila en vez de en el de heap cosa que vería normal si fuera otro tipo de variable, ya que está dentro de la función main() pero al usar malloc() me parece raro que no esté en otra dirección de memoria más baja. Gracias de antemano. Título: Re: Asignar memoria con malloc() en C Publicado por: MAFUS en 17 Abril 2022, 21:38 pm Cuidado con ese malloc(4)
A mi me da Código: .data segment Ya ves que la stack, al menos en mi máquina, está lejos del heap. Título: Re: Asignar memoria con malloc() en C Publicado por: nullx100 en 17 Abril 2022, 22:10 pm Gracias por tu respuesta MAFUS, ya veo que en tu caso si que parece estar usando el segmento heap.
El programa lo ejecuto en Ubuntu 32 bits con gcc para compilarlo. ¿A que te refieres con "Cuidado con ese malloc(4)"? No está siendo utilizado de la forma correcta? Título: Re: Asignar memoria con malloc() en C Publicado por: MAFUS en 17 Abril 2022, 23:42 pm No, no está siendo utilizado de forma correcta. int no tiene un número de bits definido y depende de la implementación. Suponer que es de 4 bytes sólo va a hacer que el código funcione en máquinas que usen ints de 4 bytes. Mejor si usas sizeof(int).
|