elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Saber la memoria liberada con free() ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Saber la memoria liberada con free() ?  (Leído 3,666 veces)
Locura_23

Desconectado Desconectado

Mensajes: 162



Ver Perfil
Saber la memoria liberada con free() ?
« en: 30 Junio 2021, 23:30 pm »

Buenas a todos! alguien sabe si hay una manera de saber la memoria que liberaste con free() ? Si bien se podria hacer el calculo en el momento de la asignación de memoria... tal vez hay otra manera de hacer eso?
Un ejemplo:

Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main()
  6. {
  7.    int num = 0;
  8.    int *pArreglo = NULL;
  9.  
  10.    do
  11.    {
  12.        printf("Ingrese la cantidad espacios a reservar en el arreglo.\n");
  13.        scanf("%i",&num);
  14.    }while(num > 0);
  15.  
  16.    pArreglo = (int *) calloc ( num, sizeof(int) );
  17.  
  18.    if(pArreglo == NULL)
  19.    {
  20.        printf("Error en la asignacion de memoria.\n");
  21.        exit(EXIT_FAILURE);
  22.    }
  23.  
  24.    free(pArreglo);
  25.  
  26.    return 0;
  27. }
  28.  
  29.  


En línea

Loretz

Desconectado Desconectado

Mensajes: 117


Ver Perfil
Re: Saber la memoria liberada con free() ?
« Respuesta #1 en: 1 Julio 2021, 01:34 am »

¿hay una manera de saber la memoria que liberaste con free()?

No.

La forma y la cantidad de memoria asignada con malloc, calloc o realloc depende exclusivamente de tu compilador ("implementation defined"). Algunos compiladores suelen asignar un bloque de memoria mayor al que estrictamente se necesitaría, para poder disponer de información de cuánta memoria dinámica deberá liberar free().

Por ejemplo, un método frecuente en algunos compiladores es escribir primero datos sobre el tamaño, un checksum, un par de punteros a los bloques anterior y siguiente, algún marcador. y alguna cosa más, y a continuación los bytes que se solicitaron como múltiplos de 16 (a modo de optimización).

En tu ejemplo sería: primero calloc busca memoria para esa estructura de datos más la cantidad num * sizeof(int) de bytes a alojar como múltiplo de 16 (si necesita alojar 10 int, digamos 40 bytes, agregará 48 = 16*3).

Luego, la dirección devuelta por calloc es la dirección donde comienzan esos datos iniciales, no donde comienza la serie de ints.

Pero como te decía, el mecanismo real depende de cada compilador, de modo que lo que funcione para el tuyo no necesariamente funcionará para otro.





En línea

Locura_23

Desconectado Desconectado

Mensajes: 162



Ver Perfil
Re: Saber la memoria liberada con free() ?
« Respuesta #2 en: 1 Julio 2021, 01:46 am »

Mmm ya veo, así que depende de cada compilador, muy interesante. Gracias por tu respuesta!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
saber el uso de memoria de un proceso
.NET (C#, VB.NET, ASP)
proteus8 2 3,875 Último mensaje 6 Septiembre 2011, 17:24 pm
por proteus8
Como saber si puedo meter más memoria ram?? « 1 2 »
Hardware
andrecid 10 5,641 Último mensaje 20 Julio 2015, 09:28 am
por Orubatosu
Problema al liberar memoria con free()
Programación C/C++
mester 7 3,722 Último mensaje 21 Mayo 2016, 14:35 pm
por AlbertoBSD
Cómo saber si puedo ampliar la memoria RAM de un portátil
Noticias
wolfbcn 0 1,779 Último mensaje 16 Enero 2017, 17:46 pm
por wolfbcn
Cómo saber cuánta memoria RAM instalar en tu PC
Noticias
wolfbcn 0 1,559 Último mensaje 12 Marzo 2017, 14:04 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines